我有一个框架,里面有两个元素。即一个条目和一个按钮。
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)
我明白了:
如果我使用pack:
self.entry.pack(side='left')
self.button.pack(side='right')
我明白了:
我将place()用于父窗口小部件。我已经尝试了所有选项的组合(填充,扩展,传播等),但没有任何效果!!!
任何帮助将不胜感激!
答案 0 :(得分:1)
您要使用此:
self.button.pack(side='right')
self.entry.pack(side='left', fill="x", expand=True)
顺序很重要,条目的fill
选项也很重要。
如果没有足够的空间来容纳小部件,则tkinter将开始按照包装时的相反顺序收缩小部件。在您的情况下,您可能会将窗口的大小强制设置为不必要的大小,因此tkinter会从按钮上删除像素,因为它最后被压缩了。通过最后压缩条目,它会根据需要收缩或扩展,并且与按钮消失之前相比,它可以收缩得更多。
答案 1 :(得分:0)
您是否要创建一个组合框?如果是这样,请尝试使用ttk.Combobox
。
关于放置小部件,我建议使用网格。我个人倾向于使用要使用的小部件绘制窗口的草图。然后我在上面画一个网格。