python-3.x 在从旧微件切换到专题微件时,放置嵌套格网几何管理器会产生一些意外结果

mum43rcc  于 2023-01-27  发布在  Python
关注(0)|答案(1)|浏览(96)

我正在写一个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()

修复了这个问题...但我不知道为什么会这样,我希望能够继续使用嵌套网格布局,而不必担心这种情况可能再次发生。
这不是我在使用旧的无主题小部件时遇到的问题。

fdbelqdn

fdbelqdn1#

我无法重现右上角的文本,也看不出为什么这段代码除了把它放在左上角之外还会做其他事情。它应该出现在左上角,因为grid和按钮会导致框架缩小以适应按钮,因此它只和按钮一样宽。此外,这一列只够宽,这一行只够高,以适应框架。2其余的窗口将闲置。
你可以通过给窗口本身一个独特的颜色来形象化,比如root.configure(bg="yellow"),你会发现按钮和它所在的框架只占用了窗口中最小的部分。
在第二个示例中,按钮水平居中显示的原因是packgrid的行为方式。当您调用mainwidget.pack()时,默认情况下它会将小部件压缩到可用空间的顶部,并沿着顶部边缘居中。当您将按钮放入框架中时,框架将缩小到刚好足够容纳按钮的大小。这导致它出现在中心,因为框架本身是居中的。

相关问题