Tkinter窗口切断按钮

时间:2017-10-04 12:09:39

标签: python tkinter

对我来说一个新问题 - 我认为与更新Tkinter版本有关 - 是因为我有时会在窗口两侧切断按钮(见截图)。是什么导致这个/什么是解决方案?我已经尝试调整窗口几何体,但它现在似乎没有任何影响。按钮的大小合适,因此向右拖动窗口会显示整个内容。这是一个窗口大小的问题。

enter image description here

def GetReDate():

    chosendate = ''.join([str(datetime.date.today().month).zfill(2),'/',str(datetime.date.today().day).zfill(2)])

    PickDatewin = Toplevel()
    PickDatewin.geometry('400x50')
    PickDatewin.title("Choose a Date")
    L1 = Label(PickDatewin, text="Date: ")
    L1.pack(side = LEFT)
    E1 = Entry(PickDatewin, bd =5)
    E1.pack(side = LEFT)
    E1.delete(0, END)
    E1.insert(0, chosendate)
    OK = Button(PickDatewin, text='Choose', command=lambda:ChooseDate(E1,chosendate,PickDatewin))
    OK.pack(side = RIGHT)

1 个答案:

答案 0 :(得分:0)

原因与窗口小部件具有首选大小这一事实有关,但窗口小部件不适合窗口。当tkinter无法再以最小请求大小绘制所有小部件时,它会开始缩小小部件,从最后一个要打包的小部件开始。

不同的平台(可能还有不同的用户)可能有不同的字体和边框宽度默认值等等,但是当您将对话框硬编码为特定大小时,您不会考虑这一点。因此,小部件的自然大小大于您请求的窗口大小,因此tkinter通过缩小要打包的最后一个小部件来尽力使它们适合。

可以说,最好的解决方案是不要强制窗口达到特定的大小。相反,让tkinter根据窗口内的小部件计算大小。

另一个简单的解决方案是确保最灵活的窗口小部件是最后打包的,因此当窗口小部件不适合时,它是第一个要缩小的窗口小部件。

注意切断按钮的原始代码之间的差异:

OK.pack(side = RIGHT)
L1.pack(side = LEFT)
E1.pack(side = LEFT)

...使用此代码,可以删除更灵活的条目小部件:

L1.pack(side = LEFT)
E1.pack(side = LEFT)
OK.pack(side = RIGHT)

有关pack如何工作的详细说明,请参阅官方tk文档中的The Packer Algorithm(tkinter所基于的)。