Я создаю простое диалоговое окно пользователя с основным текстом сверху и древовидным представлением с одним столбцом внизу, которое дает пользователю несколько вариантов. Кнопка внизу используется для подтверждения выбора.
Теперь я не могу получить виджет Сообщения, который я использую для отображения инструкций, чтобы заполнить кадр, который я создал для него. Между тем, виджет Treeview заполняет фрейм так, как я хочу.
Многие предлагаемые решения по другим вопросам StackOverflow утверждают, что установка my_message.pack(fill=tk.X, expand=True)
должна работать. В моем случае это не так. В другом сценарии рекомендуется поставить my_frame.columnconfigure(0, weight=1)
, что тоже не помогает.
Вот код:
import tkinter as tk
from tkinter import ttk
class MessageBox(object):
""" Adjusted code from StackOverflow #10057662. """
def __init__(self, msg, option_list):
root = self.root = tk.Tk()
root.geometry("400x400")
root.title('Message')
self.msg = str(msg)
frm_1 = tk.Frame(root)
frm_1.pack(expand=True, fill=tk.X, ipadx=2, ipady=2)
message = tk.Message(frm_1, text=self.msg)
message.pack(expand=True, fill=tk.X) # <------------------------------------ This doesn't show the desired effect!
frm_1.columnconfigure(0, weight=1)
self.tree_view = ttk.Treeview(frm_1)
self.tree_view.heading("#0", text="Filename", anchor=tk.CENTER)
for idx, option in enumerate(option_list):
self.tree_view.insert("", idx+1, text=option)
self.tree_view.pack(fill=tk.X, padx=2, pady=2)
choice_msg = "Long Test string to show, that my frame is unfortunately not correctly filled from side to side, as I would want it to."
choices = ["Test 1", "Test 2", "Test 3"]
test = MessageBox(choice_msg, choices)
test.root.mainloop()
IЯ медленно схожу с ума, потому что я знаю, что, возможно, что-то очень простое отменяет правильное позиционирование виджета, но я уже несколько часов пробую разные решения StackOverflow и просматриваю документацию безуспешно.