【发布时间】:2017-10-18 17:01:51
【问题描述】:
当我按下切换标题按钮时,如何防止此应用中的小部件改变大小?
我希望两个 Treeview 始终占据窗口宽度的 50%
目前,左边的列在获得更多/更少列时会调整大小
import tkinter as tk
from tkinter import ttk
def toggle_headings():
global htog
if htog==0:
t1.config(columns=columnswide)
for i,h in enumerate(columnswide):
c = ('#')+str(i)
t1.heading(c,text=h)
htog = 1
else:
t1.config(columns=columns)
t1.heading(columns[0],text=columns[0])
htog = 0
htog = 0
app = tk.Tk()
columnswide = ['abcd' for i in range(5)]
columns = ['abcd']
columnsbutton = tk.Button(app,text='toggle headings',command=toggle_headings)
t1 = ttk.Treeview(app,selectmode='browse',columns=columns)
t2 = ttk.Treeview(app,selectmode='browse',columns=columnswide)
for i,h in enumerate(columnswide):
c = ('#')+str(i)
t2.heading(c,text=h)
t1.heading(columns[0],text=columns[0])
for i in range(10):
t1.insert('','end',text='testing '+str(i),values=['value'])
t2.insert('','end',text='testing '+str(i),values=['value' for i in range(5)])
columnsbutton.pack(side='top',fill='x',expand=1)
t1.pack(side='left',fill='both',expand=1)
t2.pack(side='left',fill='both',expand=1)
app.mainloop()
如果有人建议使用 .grid(),我在下面尝试了这种方法:
import tkinter as tk
from tkinter import ttk
def toggle_headings():
global htog
if htog==0:
t1.config(columns=columnswide)
for i,h in enumerate(columnswide):
c = ('#')+str(i)
t1.heading(c,text=h)
htog = 1
else:
t1.config(columns=columns)
t1.heading(columns[0],text=columns[0])
htog = 0
htog = 0
app = tk.Tk()
columnswide = ['abcd' for i in range(5)]
columns = ['abcd']
columnsbutton = tk.Button(app,text='toggle headings',command=toggle_headings)
t1 = ttk.Treeview(app,selectmode='browse',columns=columns)
t2 = ttk.Treeview(app,selectmode='browse',columns=columnswide)
for i,h in enumerate(columnswide):
c = ('#')+str(i)
t2.heading(c,text=h)
t1.heading(columns[0],text=columns[0])
for i in range(10):
t1.insert('','end',text='testing '+str(i),values=['value'])
t2.insert('','end',text='testing '+str(i),values=['value' for i in range(5)])
columnsbutton.grid(row=0,column=0,columnspan=2,sticky='we')
t1.grid(row=1,column=0,sticky='nswe')
t2.grid(row=1,column=1,sticky='nswe')
app.grid_columnconfigure(0,weight=1)
app.grid_columnconfigure(1,weight=1)
app.mainloop()
【问题讨论】:
-
这很难,框架小部件可能会有所帮助
-
@AlexBohm 在完整版程序中,两个树视图都位于单独的框架小部件内,添加列的效果是相同的,但感谢您的想法