为什么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()
我是不是哪里做错了?如果有关系的话,我是在64位的Ubuntu 12.10上使用Python 2.7.3。
补充:似乎当窗口的大小超过852x402
时,尺寸要么不对(水平变大),要么根本不显示(垂直变大)。这是不是我窗口管理器(比如Unity)的问题?
2 个回答
2
这是因为画布没有被调整大小。你虽然给画布设置了绑定,但并没有让画布随着窗口的大小变化而变化。
你可以试着给画布和框架的背景设置一个明显的颜色,这样你就能明白我说的意思了。
要解决这个问题,可以在放置你的组件时设置 expand
和 fill
属性。
2
把这行代码 canvas = Canvas(main, width=850, height=400)
改成 canvas = Canvas(main, width=850, height=400, bg="red")
,然后看看会发生什么。
因为这个画布是在主窗口里面的,当你把窗口垂直拉大时,画布的大小和位置并没有改变。它的最大高度保持在400,所以不会触发任何事件。但是如果你把窗口横向拉大,画布的位置会正好在中间,这是因为调用了 pack()
这个方法:所以它会移动,并且会触发相关的函数。
当你把窗口横向和纵向都缩小时,其他的结果都是可以预料的。