Задача Ткинтера с геометрией композитной рамы - PullRequest
0 голосов
/ 08 октября 2018

У меня есть рамка с двумя элементами;а именно, Вход и Кнопка.

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'))

Всякий раз, когда я пытаюсь упаковать () или поместить () рамку в родительский виджет, я всегда получаю разные вещи - не то, что я хочу.

Я хочу это:

What I want

Если я использую место:

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)

Я получаю это:

result with place()

Принимая во внимание, что, если я использую пакет:

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

, я получаю это:

result with pack()

Я используюplace () для родительского виджета.Я перепробовал все комбинации опций (заполнить, развернуть, распространить и т. Д.), Но ничего не работает !!!

Любая помощь будет высоко ценится!

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Вы хотите использовать это:

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

Порядок важен, как и опция fill для записи.

Если для виджетов недостаточно места, tkinter начнет сокращать виджеты в обратном порядке, в котором они были упакованы.В вашем случае вы, вероятно, заставляете окно иметь меньший размер, чем необходимо, поэтому tkinter удаляет пиксели с кнопки, потому что она была упакована последней.Упаковывая запись в последнюю очередь, она будет сжиматься или расширяться по мере необходимости, и она может позволить себе сжиматься намного больше, чем кнопка, прежде чем она исчезнет.

0 голосов
/ 08 октября 2018

Вы пытаетесь создать комбинированный список?Если это так, попробуйте вместо этого использовать ttk.Combobox.

Что касается размещения виджетов, я рекомендую использовать сетку.Лично я стараюсь сделать эскиз окна с виджетами, которые я хочу использовать.Затем я рисую сетку над этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...