Python 如何正确扩展tkinter窗口?
我希望随着用户的扩展,整个东西都能扩展,而不需要像listbox这样的小部件,重新塑造。我希望它完全像扩展一个静止图像一样,保持其纵横比。我该怎么做Python 如何正确扩展tkinter窗口?,python,tkinter,window,expand,Python,Tkinter,Window,Expand,我希望随着用户的扩展,整个东西都能扩展,而不需要像listbox这样的小部件,重新塑造。我希望它完全像扩展一个静止图像一样,保持其纵横比。我该怎么做 from tkinter import * import random from random import * import threading selected = 0 contained = {} contained[0] = [] name = {} maxEventItems = 100 i = 0 while i < 1
from tkinter import *
import random
from random import *
import threading
selected = 0
contained = {}
contained[0] = []
name = {}
maxEventItems = 100
i = 0
while i < 10 ** 3:
contained[0].append(i)
name[i] = 'Event {}'.format(i)
i += 1
# Beginning of thread part, in the future.
def eventViewerListboxItems():
i = 0
while i < len(contained[selected]):
eventNumber = contained[selected][i]
eventViewerListbox.insert(END,'{}'.format(name[eventNumber]))
i += 1
master = Tk()
masterCanvas = Canvas(master)
masterCanvas.grid(row = 0,column = 0,sticky = N + S + E + W)
masterFrame = Frame(masterCanvas)
masterFrame.grid(row = 0,column = 0)
main = Frame(masterFrame)
main.grid(row = 0,column = 0)
topButtons = Frame(main)
topButtons.grid(row = 0, column = 0)
saveButton = Button(topButtons,text = 'Save')
saveButton.grid(row = 0,column = 0,sticky = W)
loadButton = Button(topButtons,text = 'Load')
loadButton.grid(row = 0,column = 1,sticky = W)
createEventButton = Button(topButtons,text = 'Create event')
createEventButton.grid(row = 0,column = 2,sticky = W)
eventViewer = Frame(main)
eventViewer.grid(row = 1, column = 0)
eventViewerListboxScrollbar = Scrollbar(eventViewer)
eventViewerListboxScrollbar.grid(row = 1,column = 1, sticky = W + N + S)
eventViewerListbox = Listbox(eventViewer)
eventViewerListbox.grid(row = 1,column = 0,sticky = W)
eventViewerListbox.config(yscrollcommand = eventViewerListboxScrollbar.set)
eventViewerListboxScrollbar.config(command = eventViewerListbox.yview)
bottomButtons = Frame(main)
bottomButtons.grid(row = 2, column = 0,sticky = E)
simulateButton = Button(bottomButtons,text = 'Simulate')
simulateButton.grid(row = 0,column = 0,sticky = E)
callEventViewerListboxItems = threading.Thread(target = eventViewerListboxItems)
callEventViewerListboxItems.start()
partial_contained = {}
partial_contained[selected] = []
i = 0
while i < maxEventItems and i < len(contained[selected]):
partial_contained[selected].append(contained[selected][i])
i += 1
print('I started putting the items from contained[{}] into the listbox in the event viewer.'.format(contained[selected][0]))
print()
print('Below, I will show the first {} items that are in contained:'.format(i,contained[selected]))
print(partial_contained[selected])
print()
master.mainloop()
从tkinter导入*
随机输入
从随机导入*
导入线程
已选择=0
包含={}
包含[0]=[]
名称={}
maxEventItems=100
i=0
而我<10**3:
包含[0]。追加(i)
名称[i]=“事件{}”。格式(i)
i+=1
#螺纹部分的开始,在将来。
def eventViewerListboxItems():
i=0
当i
问题在于您使用的是网格,但没有为任何行或列指定权重。权重确定哪些行和列被赋予额外空间,例如当用户调整窗口大小时。默认情况下,每行和每列的权重为零,这意味着它们不会获得额外的权重
根据经验,您需要为至少一行和一列调用grid\u rowconfigure
和grid\u columnsigure
,并为该行或列赋予正权重。对于使用网格管理其子部件的每个小部件,您都需要这样做
您也没有始终如一地使用sticky
属性,因此,即使您让列增长和收缩,您的小部件也不会扩展以填充给定的区域
你需要有条理地创建一个复杂的布局。我的建议是重新开始,让masterCanvas
像你期望的那样增长和收缩。给它一个醒目、独特的封面,这样你就可以看到它(即:如果它与背景颜色相同,就不可能知道它是在变大还是在变小,以填充整个区域)
一旦你得到了masterCanvas
,在那里它可以正常地增长和收缩,然后转到masterFrame
,然后是main
,然后是eventViewer
,最后是列表框。在每个步骤中,一定要给小部件一个独特的颜色,以便您可以可视化它
您可能还想考虑删除这么多层嵌套的框架。你拥有的越多,让他们一起工作就越困难。然而,如果你采取有条理的方法,多个领域是很容易的,不要试图让六个不同的框架同时工作。让其中一个工作,然后关注它的直系子女。当他们工作时,关注他们的孩子,等等。
我不理解这句话:“没有小部件,比如列表框,就要重塑”。你想扩展什么?列表框?除了列表框之外的所有内容?所有内容,但请注意,当列表框展开时,它会略微改变形状。它不像静止图像。