Seite 1 von 1

Python Tkinter, Problem mit Notebook widget im Zshg. mit Ausrichtung von Buttons

Verfasst: Mittwoch 1. Januar 2020, 02:50
von Equilibrum
Hi @ all,

Ich habe ein Problem mit dem Notebook-Widget von Pythons Tkinter-Modul beim Ausrichten von Buttons.

Ich verstehe nicht, wie ich im angehängten Code erreichen kann, dass in der Registerkarte "Text" die beiden Schaltflächen "previous" und "next" am unteren Rand des root-Fensters kleben bleiben, unabhängig von der Länge des Textes im Message-Widget.

Ich möchte verschiedene Texte unterschiedlicher Länge anzeigen und die Schaltflächen immer am unteren Rand des Fensters positionieren.

Könnte mir bitte jemand erklären, was ich dazu im unten angehängten Code ändern muss?

Code: Alles auswählen

from tkinter import *
from tkinter.ttk import *

root = Tk()
root.geometry("600x600")
note = Notebook(root)

tab1 = Frame(note)
tab2 = Frame(note)
tab3 = Frame(note)

temp = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et'

M1 = Message(tab1, text=temp, width=600)
M1.grid(row=0, column=0, sticky='n')

F1 = Frame(tab1)
F1.grid(row=1, column=0, sticky='ew')

B1P = Button(F1, text='previous')
B1P.grid(row=0, column=0, sticky='ew')
B1N = Button(F1, text='next')
B1N.grid(row=0, column=1, sticky='ew')

F1.grid_columnconfigure(0, weight=1)
F1.grid_columnconfigure(1, weight=1)

F1.grid_rowconfigure(0, weight=1)

note.add(tab1, text = "Text")
note.add(tab2, text = "Add")
note.add(tab3, text = "Edit")
note.grid(sticky='ns')

mainloop()

Re: Python Tkinter, Problem mit Notebook widget im Zshg. mit Ausrichtung von Buttons

Verfasst: Mittwoch 1. Januar 2020, 18:02
von __deets__
Der Code unten tut denke ich was du willst. Ein paar Anmerkungen:

- Sternchenimporte sind boese(tm). Gerade bei Tkinter holt man sich damit *hunderte* Namen in den Namensraum, die beliebig kollidieren koennen. Besser ist explizite importe (so wie ich) oder import tkinter as tk zu nutzen.
- deine Namen entsprechen weder der Konvention von PEP8 noch sind sie sprechend. Und das hat mir das Verstaendnis deines Codes deutlich erschwert. Und das tut es garantiert auch dir, spaetestens in 3 Wochen.
- auf Modulebene gehoert kein Code der ausgefuehrt wird. Frueher oder spaeter muss auch Objektorientierung ins Spiel, GUI-Programmierung geht nicht wirklich ohne.

Code: Alles auswählen

from tkinter import Tk, Frame, Message, Button, BOTH, BOTTOM
from tkinter.ttk import Notebook

def main():

    root = Tk()
    root.geometry("600x600")
    note = Notebook(root)

    tab_text = Frame(note)
    tab_add = Frame(note)
    tax_edit = Frame(note)

    temp = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et'

    m1 = Message(tab_text, text=temp, background="red")
    m1.pack(fill=BOTH, expand=1)

    text_buttons_container = Frame(tab_text)
    text_buttons_container.pack(side=BOTTOM, expand=0)

    text_previous_button = Button(text_buttons_container, text='previous')
    text_previous_button.grid(row=0, column=0, sticky='ew')
    text_next_button = Button(text_buttons_container, text='next')
    text_next_button.grid(row=0, column=1, sticky='ew')

    text_buttons_container.grid_columnconfigure(0, weight=1)
    text_buttons_container.grid_columnconfigure(1, weight=1)

    text_buttons_container.grid_rowconfigure(0, weight=1)

    note.add(tab_text, text="Text")
    note.add(tab_add, text="Add")
    note.add(tax_edit, text="Edit")
    note.pack(fill=BOTH, expand=1)

    root.mainloop()

if __name__ == '__main__':
    main()