Szukaj…


Wprowadzenie

Wydana w Tkinter jest najpopularniejsza biblioteka graficznego interfejsu użytkownika w języku Python. W tym temacie wyjaśniono prawidłowe wykorzystanie tej biblioteki i jej funkcji.

Uwagi

Wielkość liter w module tkinter różni się w Python 2 i 3. W przypadku Python 2 użyj następujących poleceń:

from Tkinter import *  # Capitalized

W przypadku Python 3 użyj następujących poleceń:

from tkinter import *  # Lowercase

W przypadku kodu, który działa zarówno z Pythonem 2, jak i 3, możesz to zrobić

try:
    from Tkinter import *
except ImportError:
    from tkinter import *

lub

from sys import version_info
if version_info.major == 2:
    from Tkinter import *
elif version_info.major == 3:
    from tkinter import *

Aby uzyskać więcej informacji, zobacz dokumentację tkinter

Minimalna aplikacja tkinter

tkinter to zestaw narzędzi GUI, który zapewnia opakowanie wokół biblioteki GUI Tk / Tcl i jest dołączony do Pythona. Poniższy kod tworzy nowe okno za pomocą tkinter i umieszcza tekst w treści okna.

Uwaga: W Pythonie 2 wielkość liter może się nieco różnić, patrz sekcja Uwagi poniżej.

import tkinter as tk

# GUI window is a subclass of the basic tkinter Frame object
class HelloWorldFrame(tk.Frame):
    def __init__(self, master):
        # Call superclass constructor
        tk.Frame.__init__(self, master)
        # Place frame into main window
        self.grid()
        # Create text box with "Hello World" text
        hello = tk.Label(self, text="Hello World! This label can hold strings!")
        # Place text box into frame
        hello.grid(row=0, column=0)

# Spawn window
if __name__ == "__main__":
    # Create main window object
    root = tk.Tk()
    # Set title of window
    root.title("Hello World!")
    # Instantiate HelloWorldFrame object
    hello_frame = HelloWorldFrame(root)
    # Start GUI
    hello_frame.mainloop()

Menedżerowie geometrii

Tkinter ma trzy mechanizmy zarządzania geometrią: place , pack i grid .

place menedżer wykorzystuje bezwzględne współrzędne piksela.

Menedżer pack umieszcza widżety na jednej z 4 stron. Nowe widżety są umieszczane obok istniejących widżetów.

Menedżer grid umieszcza widżety w siatce podobnej do dynamicznie zmieniającego się arkusza kalkulacyjnego.

Miejsce

Najczęstsze argumenty słów kluczowych dla widget.place są następujące:

  • x , bezwzględna współrzędna x widżetu
  • y , bezwzględna współrzędna y widżetu
  • height , bezwzględna wysokość widżetu
  • width , bezwzględna szerokość widżetu

Przykład kodu z użyciem place :

class PlaceExample(Frame):
    def __init__(self,master):
        Frame.__init__(self,master)
        self.grid()
        top_text=Label(master,text="This is on top at the origin")
        #top_text.pack()
        top_text.place(x=0,y=0,height=50,width=200)
        bottom_right_text=Label(master,text="This is at position 200,400")
        #top_text.pack()
        bottom_right_text.place(x=200,y=400,height=50,width=200)
# Spawn Window
if __name__=="__main__":
    root=Tk()
    place_frame=PlaceExample(root)
    place_frame.mainloop()

Pakiet

widget.pack może przyjmować następujące argumenty słów kluczowych:

  • expand , czy wypełnić przestrzeń pozostawioną przez rodzica
  • fill , czy rozwinąć, aby wypełnić całą spację (BRAK (domyślnie), X, Y lub OBA)
  • side , strona do spakowania (TOP (domyślnie), DOLNY, LEWY lub PRAWY)

Krata

Najczęściej używane argumenty słów kluczowych widget.grid są następujące:

  • row , wiersz widżetu (domyślnie najmniejszy niezajęty)
  • rowspan , liczba kolumn widżetu (domyślnie 1)
  • column , kolumna widżetu (domyślnie 0)
  • columnspan , liczba kolumn obejmujących widżet (domyślnie 1)
  • sticky , gdzie umieścić widżet, jeśli komórka siatki jest większa od niego (kombinacja N, NE, E, SE, S, SW, W, NW)

Wiersze i kolumny są indeksowane zerowo. Rzędy rosną w dół, a kolumny rosną w prawo.

Przykład kodu z użyciem grid :

from tkinter import *

class GridExample(Frame):
    def __init__(self,master):
        Frame.__init__(self,master)
        self.grid()
        top_text=Label(self,text="This text appears on top left")
        top_text.grid() # Default position 0, 0
        bottom_text=Label(self,text="This text appears on bottom left")
        bottom_text.grid() # Default position 1, 0
        right_text=Label(self,text="This text appears on the right and spans both rows",
                         wraplength=100)
        # Position is 0,1
        # Rowspan means actual position is [0-1],1
        right_text.grid(row=0,column=1,rowspan=2)

# Spawn Window
if __name__=="__main__":
    root=Tk()
    grid_frame=GridExample(root)
    grid_frame.mainloop()

Nigdy nie mieszaj pack i grid w tej samej ramce! Może to doprowadzić do impasu aplikacji!



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow