我正在写一个tkinter应用程序,我试着把我使用的小部件切换到新的ttk小部件,我做了切换,启动了我的应用程序,它使用嵌套在网格布局中的网格布局,发现所有的文本现在都与每个小部件的右上角对齐。
我在一个示例文件中测试了一些东西:
from tkinter import *
from tkinter.ttk import *
root = Tk()
root.geometry("600x800")
root.title('Styles Example')
mainwidget = Frame(root)
label = Label(mainwidget, text='lil button')
mainwidget.grid()
label.grid(pady='1c', sticky='esnw')
root.mainloop()
看起来把代码从那个转换成这个
from tkinter import *
from tkinter.ttk import *
root = Tk()
root.geometry("600x800")
root.title('Styles Example')
mainwidget = Frame(root)
button = Label(mainwidget, text='lil button')
#changed the top frame to use the pack manager instead of grid
**mainwidget.pack()**
button.grid(pady='1c', sticky='esnw')
root.mainloop()
修复了这个问题...但我不知道为什么会这样,我希望能够继续使用嵌套网格布局,而不必担心这种情况可能再次发生。
这不是我在使用旧的无主题小部件时遇到的问题。
1条答案
按热度按时间fdbelqdn1#
我无法重现右上角的文本,也看不出为什么这段代码除了把它放在左上角之外还会做其他事情。它应该出现在左上角,因为
grid
和按钮会导致框架缩小以适应按钮,因此它只和按钮一样宽。此外,这一列只够宽,这一行只够高,以适应框架。2其余的窗口将闲置。你可以通过给窗口本身一个独特的颜色来形象化,比如
root.configure(bg="yellow")
,你会发现按钮和它所在的框架只占用了窗口中最小的部分。在第二个示例中,按钮水平居中显示的原因是
pack
和grid
的行为方式。当您调用mainwidget.pack()
时,默认情况下它会将小部件压缩到可用空间的顶部,并沿着顶部边缘居中。当您将按钮放入框架中时,框架将缩小到刚好足够容纳按钮的大小。这导致它出现在中心,因为框架本身是居中的。