2013-02-25 25 views
2

當我嘗試檢測窗口是否用tkinter調整大小時,它大部分時間都有效。但是,有一個例外;也就是說,當第一次垂直調整大小並使窗口變大時,沒有任何東西被拾取。當窗口出現時,我會看到初始大小,但如果我試圖立即使窗口垂直放大,則不會出現這種情況。但是,如果我嘗試以另一種方式(即縮小尺寸或水平調整尺寸)重新調整大小,使其垂直「更高」,那麼它可以正常工作。爲什麼tkinter沒有意識到這個窗口正在調整大小?

下面是我使用的代碼的要點:

from Tkinter import * 
main = Tk() 
def resize(event): 
    print("The new dimensions are:",event.width,"x",event.height) 
    window.focus_set() 
canvas = Canvas(main, width=850, height=400) 
window = Frame(main, width=800, height=10) 
window.focus_set() 
canvas.bind("<Configure>", resize) 
canvas.pack() 
canvas.update() 
window.pack() 
main.mainloop() 

難道我做錯了什麼? 如果它的事項,我使用Python 2.7.3在64位的Ubuntu 12.10

編輯:它好像尺寸是可能不正確(水平放大)或完全無法顯示(垂直放大)若窗口大小高於852x402。這是我的窗口管理器(即Unity)的問題嗎?

回答

2

變化canvas = Canvas(main, width=850, height=400)通過canvas = Canvas(main, width=850, height=400, bg="red"),看看會發生什麼。

由於帆布是根窗口內,當使窗口垂直較大,則不會改變畫布的大小或位置。它保持其最大高度爲400,並且處理程序不被調用。但是,在水平放大的情況下,由於調用pack(),它的位置正好位於中間:這就是爲什麼它會移動,並且調用綁定函數。

當您將窗口縮小爲水平和垂直時的其餘結果如預期的那樣。

+0

感謝您澄清爲什麼水平調整大小的作品和垂直不。 – Vreality 2013-02-25 23:16:49

2

這是因爲畫布是被調整。您正在畫布上設置裝訂,但您尚未將畫布配置爲隨着包含窗口一起增長和縮小。

嘗試帆布和框架的窗口部件的背景設置爲獨特的東西,你就會明白我的意思。

要解決該問題,嘗試包裝你的部件時設置expandfill屬性。

+0

當我使用嘗試包參數爲(fill = BOTH,expand = YES)時,畫布不會垂直填充窗口。爲什麼?我刪除了畫布的高度和寬度參數。 – Vreality 2013-02-25 23:22:12

+0

@Vality:我覺得很難相信。你是否用你的問題中的_exact_代碼表達過,但是這種改變僅僅侷限於你打包畫布的位置,畫布不會調整大小? – 2013-02-25 23:53:17

+0

不。它調整大小,但不完全垂直。 (窗口底部有一個小小的灰色空間)。 – Vreality 2013-02-26 00:30:42

相關問題