Python - Tkinter Frame


Python Tkinter Frame widget se koristi za organizovanje grupe widgeta. Djeluje kao kontejner koji se može koristiti za držanje drugih widgeta. Pravougaone oblasti ekrana se koriste za organizovanje widgeta za python aplikaciju. Sintaksa za korištenje Frame vidžeta je:

w = Frame(parent,  options)  

Spisak mogućih opcija je dat u sljedećoj tabeli.

Opcija Opis
bd Predstavlja širinu border-a (granice).
bg Predstavlja boju pozadine widgeta.
cursor Pokazivač miša se mijenja na različite vrijednosti poput strelice, tačke itd.
height Visina Frame-a (okvira).
highlightbackground Boja pozadine kada je u fokusu.
highlightcolor Boja teksta kada je widget u fokusu.
highlightthickness Određuje debljinu oko ivice kada je widget ispod fokusa.
relief Određuje tip ivice. Zadana vrijednost ako je FLAT.
width Predstavlja širinu widgeta.

Primjer broj 1: Tkinter Frame

from tkinter import *  
  
top = Tk()  
top.geometry("140x100")  
frame = Frame(top)  
frame.pack()  
  
leftframe = Frame(top)  
leftframe.pack(side = LEFT)  
  
rightframe = Frame(top)  
rightframe.pack(side = RIGHT)  
  
btn1 = Button(frame, text="Crvena", fg="red",activebackground = "red")  
btn1.pack(side = LEFT)  
  
btn2 = Button(frame, text="Smeđa", fg="brown", activebackground = "brown")  
btn2.pack(side = RIGHT)  
  
btn3 = Button(rightframe, text="Plava", fg="blue", activebackground = "blue")  
btn3.pack(side = LEFT)  
  
btn4 = Button(leftframe, text="Bijela", fg="black", activebackground = "white")  
btn4.pack(side = RIGHT)  
  
top.mainloop()

Prikaz koda iz gornjeg primjera izgledaće ovako:




Primjer broj 2: Tkinter Frame

import tkinter as tk
from tkinter import ttk

def create_input_frame(container):

    frame = ttk.Frame(container)

    # Raspored okvira
    frame.columnconfigure(0, weight=1)
    frame.columnconfigure(0, weight=3)

    # Label pronađi
    ttk.Label(frame, text='Pronađi nešto:').grid(column=0, row=0, sticky=tk.W)
    keyword = ttk.Entry(frame, width=30)
    keyword.focus()
    keyword.grid(column=1, row=0, sticky=tk.W)

    # Label zamjeni
    ttk.Label(frame, text='Zamjeni sa:').grid(column=0, row=1, sticky=tk.W)
    replacement = ttk.Entry(frame, width=30)
    replacement.grid(column=1, row=1, sticky=tk.W)

    # Potvrdni okvir za podudaranje
    match_case = tk.StringVar()
    match_case_check = ttk.Checkbutton(
        frame,
        text='Podudaranje',
        variable=match_case,
        command=lambda: print(match_case.get()))
    match_case_check.grid(column=0, row=2, sticky=tk.W)

    # Okvir za potvrdu
    wrap_around = tk.StringVar()
    wrap_around_check = ttk.Checkbutton(
        frame,
        variable=wrap_around,
        text='Wrap around',
        command=lambda: print(wrap_around.get()))
    wrap_around_check.grid(column=0, row=3, sticky=tk.W)

    for widget in frame.winfo_children():
        widget.grid(padx=0, pady=5)

    return frame

def create_button_frame(container):
    frame = ttk.Frame(container)

    frame.columnconfigure(0, weight=1)

    ttk.Button(frame, text='Nađi idući').grid(column=0, row=0)
    ttk.Button(frame, text='Zamjeni').grid(column=0, row=1)
    ttk.Button(frame, text='Zamjeni sve').grid(column=0, row=2)
    ttk.Button(frame, text='Odustani').grid(column=0, row=3)

    for widget in frame.winfo_children():
        widget.grid(padx=0, pady=3)

    return frame

def create_main_window():

    # Root window
    root = tk.Tk()
    root.title('Zamjena')
    root.geometry('400x150')
    root.resizable(0, 0)
    # Samo za window (uklanja dugme za minimiziranje/uvećavanje)
    root.attributes('-toolwindow', True)

    # Raspored na root window
    root.columnconfigure(0, weight=4)
    root.columnconfigure(1, weight=1)

    input_frame = create_input_frame(root)
    input_frame.grid(column=0, row=0)

    button_frame = create_button_frame(root)
    button_frame.grid(column=1, row=0)

    root.mainloop()

if __name__ == "__main__":
    create_main_window()

Prikaz koda iz gornjeg primjera izgledaće ovako:



Kako radi program? Prvo uvezite Tkinter modul i Tkinter.ttk podmodul:

import tkinter as tk
from tkinter import ttk

Drugo, kreirajte lijevi okvir u funkciji create_input_frame(). Sljedeći kod dodaje dodatke svim widget-ima unutar input_frame:

for widget in frame.winfo_children():
    widget.grid(padx=0, pady=5)

Treće, kreiramo pravi okvir u funkciji create_button_frame(). Četvrto, kreiramo korijenski prozor (root window) u funkciji create_main_window(). Sljedeći kod uklanja dugmad za minimiziranje/maksimiziranje iz prozora (window):

root.attributes('-toolwindow', True)

Imajte na umu da ovaj kod radi samo na Windows-u. U funkciji create_main_window() kreiramo i lijevi okvir, desni okvir i koristimo upravitelj geometrije mreže (grid geometry manager) da ih rasporedimo na korijen prozora. Konačno, pozovite funkciju create_main_window() u bloku if __name__ == "__main__":.