繁体   English   中英

复合框架几何的Tkinter问题

[英]Tkinter problem with geometry of composite frame

我有一个框架,里面有两个元素。 即一个条目和一个按钮。

class MyEntry(tk.Frame):
def __init__(self, root, *args, **kwargs):
    super().__init__(root)

    self.var = tk.StringVar(self)
    self.var.trace("w", self.changed)

    self.entry = tk.Entry(self, textvariable=self.var)

    self.button = tk.Button(self, text='▼',command=lambda: self.changed('','','arrow'))

每当我尝试将框架打包(或放置)到父窗口小部件时,我总是会得到不同的东西-不是我想要的东西。

我要这个:

我想要的是

如果我使用场所:

self.entry.place(relx=0,rely=0,relwidth=0.95,relheight=1)
self.button.place(relx=0.95,rely=0,relwidth=0.05,relheight=1)

我得到这个:

结果与place()

而如果我使用pack:

self.entry.pack(side='left')
self.button.pack(side='right')

我得到这个:

pack()的结果

我将place()用于父窗口小部件。 我已经尝试了选项的所有组合(填充,扩展,传播等),但是没有任何效果!!!

任何帮助将非常感激!

您要使用此:

self.button.pack(side='right')
self.entry.pack(side='left', fill="x", expand=True)

顺序很重要,条目的fill选项也很重要。

如果没有足够的空间容纳小部件,则tkinter将以与包装它们相反的顺序开始收缩小部件。 在您的情况下,您可能会将窗口的大小强制设置为不必要的大小,因此tkinter会从按钮上删除像素,因为它最后被压缩了。 通过最后压缩条目,它会根据需要收缩或扩展,并且与按钮消失之前相比,它可以收缩得更多。

您是否要创建一个组合框? 如果是这样,请尝试使用ttk.Combobox

关于放置小部件,我建议使用网格。 我个人倾向于使用要使用的小部件绘制窗口的草图。 然后我在上面画一个网格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM