Python Tkinter Primer Hinweis

Hintergrund

Es ist keine hohe Leistung (es gibt Unannehmlichkeiten in Bezug auf Transparenz und Standardfunktionen), aber da es Standard ist, werde ich es für mich als Memorandum zusammenfassen.

Wenn ich versuche, mit \ # Strg + C zu beenden, ist es ärgerlich, dass es nicht reagiert, bis ich das Fenster berühre

Fenster erstellen

import tkinter as tk

root = tk.Tk() # Window
root.title('Hello Window') # Window title
root.geometry('%dx%d' % (400, 400)) # Window size (width, height)

#Initialisieren und platzieren Sie das Widget hier

root.mainloop()

Blockiere mit root.mainloop (). Verlassen Sie die Hauptschleife, wenn das Fenster geschlossen ist.

Hauptschleife

Um genau zu sein, scheint Tk eher die Hauptschleife von Tkinter als Window zu verwalten. Sie können das zweite und dritte Fenster mit tk.Toplevel erstellen, wenn Sie mehrere Fenster für die Verwendung von Modal usw. erstellen (entspricht Form = VB.NET, Frame = Java). Im Fall von Java war es mir egal, weil ich denke, dass der Thread, der die Schleife für die GUI ausführt, aufsteht (er bleibt am Leben, auch wenn der Hauptthread, der die Hauptfunktion ausführt, endet), aber im Fall von Tkinter ist er explizit. Es scheint gezielt gehandhabt zu werden.

Wenn Sie nicht möchten, dass Tk selbst als Root-Fenster existiert (mit tk.Toplevel), können Sie es mit root.withdraw () entfernen. Die Logik von "Fenster geschlossen = Hauptschleife beenden = Programm beenden" funktioniert jedoch nicht (erinnert an Swings DefaultCloseOperation), daher root.destroy (erinnert mich an Swings DefaultCloseOperation) am Ende der Anwendung, um die Hauptschleife zu beenden. ) Anruf.

Erstellen einer Anwendung mit ausgeblendetem Root-Fenster

Zeigen Sie ein Fenster mit tk.Toplevel an, sodass die Hauptschleife endet, wenn ein bestimmtes Fenster geschlossen wird.

import tkinter as tk

root = tk.Tk()
root.withdraw()

window = tk.Toplevel(root)
window.title('Hello Window')
window.geometry('%dx%d' % (400, 400))
window.protocol('WM_DELETE_WINDOW', root.destroy)

#Initialisieren und platzieren Sie das Widget hier

root.mainloop()

Das Schließen von window kann durch window.protocol ('WM_DELETE_WINDOW', handler_func) (entsprechend WindowListener \ #windowClosing of Swing) erkannt werden.

window.protocol('WM_DELETE_WINDOW', root.destroy)

Schließlich wäre es in einer Anwendung wie einem einzelnen Fenster + Modal einfacher, Tk gehorsam als Hauptfenster zu behandeln.

Platzierung des Rahmens

frame = tk.Frame(root)
# frame = tk.Frame(root, bg='#FF00FF')
# frame['bg'] = '#FF00FF'
frame.place(x=8, y=8, width=200, height=200)

Panel(VB.NET/Java)/UIView(iOS)/ViewGroup(Android)的なやつ。Widgetのコンストラクタにbgとしてカラーコードを渡すと背景色を設定できる。初期化後に背景色を設定したい場合はディスクリプタ経由(widget['bg'])で設定できる。

Label Label(VB.NET/Java)/UILabel(iOS)/TextView(Android)的なやつ。

label = tk.Label(root, text='Hello')
# label['text'] = 'Another text'
label.place(x=8, y=8)

Button- und Event-Handler

def onHelloClicked(event):
    print(event) # <ButtonPress event num=BUTTON_NUM x=MOUSE_X y=MOUSE_Y>
    # print(event.x, event.y, event.num)

button = tk.Button(root, text='Hello')
# button = tk.Button(root, text='Hello', width=10)
# button['text'] = 'Another text'

button.bind('<Button-1>', onHelloClicked)
# button.bind('<Button-2>', onHelloClicked)
# button.bind('<Button-3>', onHelloClicked)
# button.bind('<Button>', onHelloClicked)

button.place(x=8, y=8)
# button.place(x=8, y=8, width=60)
# button.place(x=8, y=8, width=60, height=31)

Sie können "width" an den Konstruktor von Widget übergeben, aber die Einheit ist kein Pixel und schwer zu verstehen (Anzahl der Zeichen?).

Sie können einen Ereignishandler bei bind registrieren. <Button - *> repräsentiert einen Mausklick (verwirrend, aber nicht mit dem tk.Button des Widgets verbunden). Klicken Sie mit der linken Maustaste auf "", klicken Sie mit der mittleren Maustaste auf "" und klicken Sie mit der rechten Maustaste auf "". Die Schaltflächennummer wird in "event.num" eingegeben ("event.num = 1" beim Klicken mit der linken Maustaste, "event.num = 3" beim Klicken mit der rechten Maustaste. Es ist verwirrend, aber nicht die Anzahl der Klicks). Sie können auch alle Mausklicks erhalten, indem Sie "