當我調整視窗大小時,我希望框架、面板和樹視圖隨之調整大小。如螢屏截圖所示,我當前的設定并非如此。
我嘗試使用它,但它沒有任何區別。
n.pack(expand=1, fill="both")
f1.columnconfigure((0, 1), weight=1)
f1.rowconfigure((0, 1), weight=1)
我也嘗試過使用Grid.columnconfigure(root, 0, weight=1)在 SO 上找到的方法,但是 Grid 沒有 columnconfigure() 所以我想知道它應該如何作業。
from tkinter import *
from tkinter import ttk
def createmenu(win):
top = Menu(win)
win.config(menu=top)
file = Menu(top)
file.add_command(label='Quit', command=win.quit, underline=0)
top.add_cascade(label='File', menu=file, underline=0)
def panels(parent):
n = ttk.Notebook(parent)
f1 = ttk.Frame(n)
f2 = ttk.Frame(n)
n.add(f1, text='Mods')
n.add(f2, text='Modfiles')
tree = ttk.Treeview(f1, columns=('mod_id', 'version', 'category_id', 'insert_timestamp'))
tree.grid(row=4, columnspan=6, sticky='nsew')
tree.insert(
'',
'end',
iid='id1',
text='sometext',
values=(12, 24, 35, 67)
)
root = Tk()
root.title("Xyrim")
root.geometry("")
print("Windowing system: " root.tk.call('tk', 'windowingsystem'))
root.option_add('*tearOff', FALSE)
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
createmenu(root)
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
panels(mainframe)
for child in mainframe.winfo_children():
child.grid_configure(padx=5, pady=5)
root.mainloop()

uj5u.com熱心網友回復:
似乎您并不真正知道自己在代碼中做了什么。
##for child in mainframe.winfo_children():
## child.grid_configure(padx=5, pady=5)
此代碼不只是添加填充,grid_configure是同義詞grid,因此適用網格默認值,但已定義的除外。因此,它不能以您想要的方式作業也就不足為奇了,您從未指定過它。
出于這個原因,使用顯式指令而不是隱式指令是一種很好的做法。如果您想為關鍵字使用默認值,您可以為其定義一個字典。
mainframe_defaults = {
'padx' : 5,
'pady' : 5}
不要使用通配符匯入,例如from tkinter import *您最終會得到一堆保留名稱,并且覆寫它們可能會導致麻煩。名稱沖突是避免它的另一個原因,或者僅僅是因為您不知道庫是否會在下一次更新中添加其他名稱,這會破壞您的應用程式。所以寧可做import tkinter as tk。
接下來,您應該使用最適合您的任務的幾何管理器。pack可以很容易地讓幾個小部件彼此相鄰并使用主控制元件調整它們的大小,特別是如果它只是容器中的一個小部件。
n = ttk.Notebook(parent)
n.pack(fill = tk.BOTH, expand=True)
給你的最后一條建議是,應用grid_rowconfigure或grid_columnconfigure掌握你希望消耗額外空間的小部件的主人,不要忘記指定正確的column或row.
f1.grid_columnconfigure(0, weight=1)
f1.grid_rowconfigure(4, weight=1)
您的完整代碼如下所示:
import tkinter as tk
from tkinter import ttk
def createmenu(win):
top = tk.Menu(win)
win.config(menu=top)
file = tk.Menu(top)
file.add_command(label='Quit', command=win.quit, underline=0)
top.add_cascade(label='File', menu=file, underline=0)
def panels(parent):
n = ttk.Notebook(parent)
n.pack(fill = tk.BOTH, expand=True, **mainframe_defaults)
f1 = ttk.Frame(n)
f2 = ttk.Frame(n)
n.add(f1, text='Mods')
n.add(f2, text='Modfiles')
tree = ttk.Treeview(f1, columns=('mod_id', 'version', 'category_id', 'insert_timestamp'))
tree.grid(row=4, columnspan=6, sticky='nsew')
tree.insert(
'',
'end',
iid='id1',
text='sometext',
values=(12, 24, 35, 67)
)
f1.grid_columnconfigure(0, weight=1)
f1.grid_rowconfigure(4, weight=1)
root = tk.Tk()
root.title("Xyrim")
root.geometry("")
print("Windowing system: " root.tk.call('tk', 'windowingsystem'))
root.option_add('*tearOff', False)
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky='nswe')
mainframe_defaults = {
'padx' : 5,
'pady' : 5}
createmenu(root)
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
panels(mainframe)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/518016.html
上一篇:從從后面開始的術語過濾列串列
