2017-10-04 99 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

相關問題