首页 > 解决方案 > Python tkinter ListBox 高度不起作用

问题描述

我在让我的 ListBox 成为我的网格配置 Tk 中的正确高度时遇到问题。它应该是 6 行高,但比这要少得多。
我正在运行 python 3.8。
我正在使用 Windows 10 计算机,但我认为这并不重要。
我想我只是错过了一些小事。
任何帮助表示赞赏。
我已经搜索并在这里找不到答案。

from tkinter import *
import tkinter.font as tkFont
from tkinter import filedialog

window = Tk()
btn_font = tkFont.Font(family='Ariel', size=20, weight='bold')

# Define functions here
def main_menu_gui():
    pass

main_menu_button = Button(window, text='Main Menu',
                                     command=main_menu_gui, font=btn_font, width=13)
main_menu_button.grid(row=0, column=0, padx=5, pady=3, sticky=W)
new_question_button = Button(window, text='New Question',
                                     command=main_menu_gui, font=btn_font, width=13)
new_question_button.grid(row=0, column=1, padx=5, pady=3)
save_question_button = Button(window, text='Save Question',
                                     command=main_menu_gui, font=btn_font, width=13)
save_question_button.grid(row=0, column=2, padx=5, pady=3)
delete_question_button = Button(window, text='Delete Question',
                                     command=main_menu_gui, font=btn_font, width=13)
delete_question_button.grid(row=0, column=3, padx=5, pady=3)
question_label = Label(text='Question', font=btn_font, justify="left")
question_label.grid(row=1, column=0, padx=5, pady=3)
question_entry = Entry(window, font=btn_font, width=47)
question_entry.grid(row=1, column=1, columnspan=3, padx=5, pady=3)
question_1_label = Label(text=f'Answer 1', font=btn_font, justify="left")
question_1_label.grid(row=2, column=0, padx=5, pady=3)
question_1_entry = Entry(window, font=btn_font, width=47)
question_1_entry.grid(row=2, column=1, columnspan=3, padx=5, pady=3)
question_2_label = Label(text=f'Answer 2', font=btn_font, justify="left")
question_2_label.grid(row=3, column=0, padx=5, pady=3)
question_2_entry = Entry(window, font=btn_font, width=47)
question_2_entry.grid(row=3, column=1, columnspan=3, padx=5, pady=3)
question_3_label = Label(text=f'Answer 2', font=btn_font, justify="left")
question_3_label.grid(row=4, column=0, padx=5, pady=3)
question_3_entry = Entry(window, font=btn_font, width=47)
question_3_entry.grid(row=4, column=1, columnspan=3, padx=5, pady=3)
question_4_label = Label(text=f'Answer 4', font=btn_font, justify="left")
question_4_label.grid(row=5, column=0, padx=5, pady=3)
question_4_entry = Entry(window, font=btn_font, width=47)
question_4_entry.grid(row=5, column=1, columnspan=3, padx=5, pady=3)
right_label = Label(text='Right Feedback', font=btn_font, justify="left")
right_label.grid(row=6, column=0, padx=5, pady=3)
right_entry = Entry(window, font=btn_font, width=47)
right_entry.grid(row=6, column=1, columnspan=3, padx=5, pady=3)
wrong_label = Label(text='Wrong Feedback', font=btn_font, justify="left")
wrong_label.grid(row=7, column=0, padx=5, pady=3)
wrong_entry = Entry(window, font=btn_font, width=47)
wrong_entry.grid(row=7, column=1, columnspan=3, padx=5, pady=3)
question_list = Listbox(window, height=6)
question_scroll = Scrollbar(question_list, orient=VERTICAL)
question_list.config(yscrollcommand=question_scroll.set)
question_scroll.config(command=question_list.yview)
question_list.grid(row=8, column=0, columnspan=4, padx=5, pady=3, sticky=N+E+S+W)
question_list.columnconfigure(0, weight=3)
question_scroll.grid(column=4, sticky=N+S)

window.mainloop()

电流输出

标签: python-3.xtkinterlistbox

解决方案


问题的根源是这一行:

question_scroll = Scrollbar(question_list, orient=VERTICAL)

请注意,您将滚动条放在列表框内。然后当您调用grid滚动条时,默认行为grid是扩大或缩小小部件以适应其子项,因此列表框的高度会缩小以适应滚动条。

而不是把滚动条question_list放进去,你需要把它放进去window

question_scroll = Scrollbar(window, orient=VERTICAL)

然后您会注意到您将滚动条放在列表框下方的行中。相反,你应该把它放在同一行:

question_scroll.grid(row=8, column=4, sticky=N+S)

如果您希望滚动条出现在列表框内,这在现代 UI 中很常见,您可以创建一个单独的框架并将列表框和滚动条都放在框架内。如果你给框架一个边框,然后删除列表框的边框,滚动条将出现在列表框的旁边。


推荐阅读