使用tkinter和python中的框架拆分窗口

使用tkinter和python中的框架拆分窗口,python,tkinter,frames,tkinter-layout,Python,Tkinter,Frames,Tkinter Layout,我试图学习tkinter以及如何使用网格和框架组织GUI。我已经创建了一个简单的滚动条列表框,但我想把它们都放在屏幕右侧的一个框架中,这样左侧就可以用于另一个框架。有谁能帮我指导一下如何将显示器分成两帧吗 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',

我试图学习tkinter以及如何使用网格和框架组织GUI。我已经创建了一个简单的滚动条列表框,但我想把它们都放在屏幕右侧的一个框架中,这样左侧就可以用于另一个框架。有谁能帮我指导一下如何将显示器分成两帧吗

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_框架来封装所有内容,因为这比直接使用Tk根更好

最后,如果要更紧密地设计界面,则需要使用
columnconfigure
rowconfigure
来控制界面如何分割未使用的空间,例如

main_frame.columnconfigure(0, weight=3)
main_frame.columnconfigure(1, weight=1)
告诉您的界面剩余水平空间的3/4属于左_框架(主_框架的第0列),1/4属于右_框架(主_框架的第1列)

一般来说,GUI设计中的很多东西都不是很直观。在您的情况下,我建议在调试时使用
bg
参数:

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

这样,当您调整窗口大小时,您可以清楚地看到程序是如何分割空间的。

这是否回答了您的问题?所以主框架在行=0,列=0处包含左框架和右框架?左帧和右帧中的列和行位置只是相对于它们自身的-如果我理解正确的话,我想这是让我困惑的一点-thanksWell
left\u frame.grid(row=0,column=0,…)
表示左帧在其父帧(main\u frame)中的行=0,列=0。类似地,对于位于列=1处的
right\u frame.grid(行=0,列=1,…)
。相反,
main\u frame.columnconfigure(0,…)
应用于列=0处的所有子项(在本例中,仅应用于左\u frame)。