2017-10-04 101 views
0

对我来说一个新问题 - 我认为与更新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) 
+0

我已经在Windows 10上用Python 3.6测试过了,它的行为和预期一样,按钮没有被切断,可能是OS /版本问题?你使用的是什么操作系统和Python版本? –

+0

OS X Sierra,Python 2.7.9。当我迁移到新计算机时,问题就开始了,所以有很多变量。 – DeltaG

+0

你有能力在3.6测试这个吗?或者在另一台Mac上? –

回答

1

的原因与事实部件有较好大小的事,但小部件将不适合在窗口中。当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文档(tkinter基于此文档)中的The Packer Algorithm

相关问题