簡體   English   中英

是否可以在Tkinter / ttk中制作“動態”可調整的小部件

[英]Is it possible to make 'dynamically' adjustable widgets in Tkinter/ttk

我正在為數據庫開發非常簡單的GUI。 它在左側面板中顯示數據庫中記錄的列表/樹,(如果用戶單擊某些記錄)在右側面板中顯示記錄。

這是創建GUI的一些代碼

from Tkinter import *
import ttk


master = Tk()

reclist = ttk.Treeview(columns=["TIME STAMP","HASH","MESSAGE"])
ysb = ttk.Scrollbar(orient=VERTICAL,   command= reclist.yview)
xsb = ttk.Scrollbar(orient=HORIZONTAL, command= reclist.xview)
reclist['yscroll'] = ysb.set
reclist['xscroll'] = xsb.set
reclist.grid(in_=master, row=0, column=0,  sticky=NSEW)
ysb.grid(in_=master, row=0, column=1, sticky=NS)
xsb.grid(in_=master, row=1, column=0, sticky=EW)

Comment = Text(master)
Comment.tag_configure("center", justify='center')
ysc = ttk.Scrollbar(orient=VERTICAL,   command= Comment.yview)
xsc = ttk.Scrollbar(orient=HORIZONTAL, command= Comment.xview)
Comment.grid(in_=master,row=0,column=2,sticky=W+E+N+S)#, columnspan=5)
ysc.grid(in_=master, row=0, column=3, sticky=NS)
xsc.grid(in_=master, row=1, column=2, sticky=EW)
master.rowconfigure(0, weight=3)
master.columnconfigure(0, weight=3)
master.columnconfigure(2, weight=3)

master.mainloop()

一切工作都很好,除了兩個面板不可調節。 我不能在它們之間移動邊框以使記錄列表或記錄面板變大或變小。 我很確定可以這樣做(例如,在gitk中,您可以在提交列表和已提交的提交之間移動邊界)。 我已經搜索了很多,沒有運氣。

您要查找的內容稱為“ PanedWindow”。 tkinter和ttk模塊都有一個,並且它們的工作原理幾乎相同。 通常的想法是創建一個PanedWindow實例,然后向其添加兩個或更多小部件。 PanedWindow將在每個小部件之間添加一個可移動的滑塊。 通常,您將使用框架,然后可以將其填充其他小部件。

這是在Tkinter中使用的示例:

import Tkinter as tk

root = tk.Tk()

pw = tk.PanedWindow()
pw.pack(fill="both", expand=True)

f1 = tk.Frame(width=200, height=200, background="bisque")
f2 = tk.Frame(width=200, height=200, background="pink")

pw.add(f1)
pw.add(f2)

# adding some widgets to the left...
text = tk.Text(f1, height=20, width=20, wrap="none")
ysb = tk.Scrollbar(f1, orient="vertical", command=text.yview)
xsb = tk.Scrollbar(f1, orient="horizontal", command=text.xview)
text.configure(yscrollcommand=ysb.set, xscrollcommand=xsb.set)

f1.grid_rowconfigure(0, weight=1)
f1.grid_columnconfigure(0, weight=1)

xsb.grid(row=1, column=0, sticky="ew")
ysb.grid(row=0, column=1, sticky="ns")
text.grid(row=0, column=0, sticky="nsew")

# and to the right...
b1 = tk.Button(f2, text="Click me!")
s1 = tk.Scale(f2, from_=1, to=20, orient="horizontal")

b1.pack(side="top", fill="x")
s1.pack(side="top", fill="x")

root.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM