使用 tkinter 和 python 中的框架拆分 windows

splitting windows using frames in tkinter and python

我正在尝试学习 tkinter 以及如何使用网格和框架来组织 GUI。我已经创建了简单的滚动条列表框,但想将它们都放在屏幕右侧的一个框架中,以便左侧可以用于另一个框架。谁能帮我指导如何将显示分成 2 帧?

from tkinter import *
from tkinter import ttk

my_window = Tk()
# frame_name = Frame(my_window)

my_list = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11',
           '12', '13', '14', '15', '16', '17', '18', '19', '20']
my_list2 = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11',
            '12', '13', '14', '15', '16', '17', '18', '19', '20']


listbox_object = Listbox(my_window)
listbox_object2 = Listbox(my_window)
# listbox.pack()
listbox_object.grid(row=0, column=1)
listbox_object2.grid(row=0, column=3)

scrollbar_object = Scrollbar(my_window)
scrollbar_object2 = Scrollbar(my_window)
# scrollbar.pack(side=RIGHT, fill=Y)
scrollbar_object.grid(row=0, column=2, sticky='ns')
scrollbar_object2.grid(row=0, column=4, sticky='ns')

for item in my_list:
    listbox_object.insert(END, item)

for item in my_list2:
    listbox_object2.insert(END, item)

# attach listbox to scrollbar
listbox_object.config(yscrollcommand=scrollbar_object.set)
listbox_object2.config(yscrollcommand=scrollbar_object2.set)
scrollbar_object.config(command=listbox_object.yview)
scrollbar_object2.config(command=listbox_object2.yview)
mainloop()

不太清楚你想用这个框架做什么。 但是,我可以告诉您,GUI 中的元素是分层的。所以如果你想分成两帧,你可以这样做:

main_frame = Frame(my_window)
main_frame.grid(row=0, column=0, sticky="nswe")

left_frame = Frame(main_frame)
left_frame.grid(row=0, column=0, sticky="nswe")

# Button added just to see that there is a left frame, otherwise it will shrink
button_object = Button(left_frame, text="My Button")
button_object.grid(row=0, column=0)

right_frame = Frame(main_frame)
right_frame.grid(row=0, column=1, sticky="nswe")

listbox_object = Listbox(right_frame)
listbox_object2 = Listbox(right_frame)
listbox_object.grid(row=0, column=0)
listbox_object2.grid(row=0, column=2)

scrollbar_object = Scrollbar(right_frame)
scrollbar_object2 = Scrollbar(right_frame)
scrollbar_object.grid(row=0, column=1, sticky='ns')
scrollbar_object2.grid(row=0, column=3, sticky='ns')

请注意,我添加了一个全局 main_frame 来封装所有内容,因为这比直接使用 Tk 根更好。

最后,如果您想设计更紧密的界面,您将需要使用 columnconfigurerowconfigure 来控制您的界面如何拆分未使用的 space,例如

main_frame.columnconfigure(0, weight=3)
main_frame.columnconfigure(1, weight=1)

告诉您的界面剩余水平 space 的 3/4 归因于 left_frame(main_frame 的第 0 列)和 1/4 归因于 right_frame (main_frame 的第 1 列)

很多事情在 GUI 设计中通常不是很直观。在你的情况下,我建议在调试时使用 bg 参数:

main_frame = Frame(my_window, bg="BLUE")
left_frame = Frame(main_frame, bg="RED")
right_frame = Frame(main_frame, bg="GREEN")

以便您在调整 window.

大小时清楚地看到您的程序如何拆分 space