我学会了如何通过在画布中嵌入框架然后像这样添加滚动条来制作可滚动框架:
def __add_widget_features(self, feat_tab):
table_frame = ttk.Frame(feat_tab)
table_frame.pack(fill=BOTH, expand=True)
self.__make_grid(table_frame)
####subframe####
self.canvas = Canvas(table_frame, borderwidth=0, background="#ffffff")
self.frame = LabelFrame(self.canvas, background="#ffffff", text="Timetable")
self.vsb = ttk.Scrollbar(table_frame, orient="vertical", command=self.canvas.yview)
self.canvas.configure(yscrollcommand=self.vsb.set)
self.vsb.pack(side="right", fill="y")
self.canvas.pack(side="right", fill="both", expand=True)
self.canvas.create_window((4,4), window=self.frame, anchor="nw",
tags="self.frame")
self.frame.bind("<Configure>", self.OnFrameConfigure)
我的程序有一个创建多个标签的gui。可滚动画布在一个选项卡中工作得很好,但是当我尝试将相同的代码添加到第二个选项卡时,滚动条在该选项卡上不起作用。如果我在第一个选项卡上注释掉代码块,它在另一个选项卡上运行正常。我已经尝试将第二个标签的所有元素命名为不同的东西(如果是问题),我已经尝试取出“自我”。部分名称,但没有一个帮助。我对Python很陌生,所以我肯定我错过了一些简单的东西。我试着张贴问题的图片,但我的代表还不够高。任何帮助都会很棒。
更新:按照Brionius的建议,这是创建笔记本的功能:
def __add_widget_datawindow(self):
'''(FordTIPGui) -> NoneType
Populate the data_window with widgets.
'''
# add data_window frame
data_frame = ttk.Frame(self.data_window)
data_frame.pack(fill=BOTH, expand=True)
self.__make_grid(data_frame)
self.add_menubar(self.data_window, "other") # add menubar
# add subframes and make them into a grid
button_frame = ttk.Frame(data_frame)
button_frame.grid(row=9, column=0, rowspan=1, columnspan=10,sticky=W+E+N+S)
self.__make_grid(button_frame)
nb_frame = ttk.Frame(data_frame)
nb_frame.grid(row=0, column=0, rowspan=9, columnspan=10, sticky=W+E+N+S)
## add widgets to subframes ##
# button_frame
disc_button = ttk.Button(button_frame, text="Disconnect", command=lambda:self.disconnect())
disc_button.grid(row=10, column=0, columnspan=1, sticky=W+E+N+S)
# nb_frame
nb = ttk.Notebook(nb_frame) # create notebook
nb.pack(fill=BOTH, expand=True)
# create frames for tabs
tab_frame1 = ttk.Frame(nb)
tab_frame2 = ttk.Frame(nb)
tab_frame3 = ttk.Frame(nb)
tab_frame4 = ttk.Frame(nb)
tab_frame5 = ttk.Frame(nb)
self.__make_grid(tab_frame1)
self.__make_grid(tab_frame2)
self.__make_grid(tab_frame3)
self.__make_grid(tab_frame4)
self.__make_grid(tab_frame5)
# add tabs
nb.add(tab_frame1, text='Confidential1 View')
nb.add(tab_frame2, text='Confidential2 View')
nb.add(tab_frame3, text='Confidential3 View')
nb.add(tab_frame4, text='Confidential4 View')
nb.add(tab_frame5, text='Confidential5 View')
# add widgets
self.__add_widget_group(tab_frame1)
self.__add_widget_feature(tab_frame2)
self.__add_widget_signal(tab_frame3)
self.__add_widget_features(tab_frame4)
self.__add_widget_timetable(tab_frame5)
问题的照片:http://www.use.com/supersize.pl?set=3059c6e412c1416578a7
答案 0 :(得分:0)
您可能在做父/子关系时出错了。看看这段代码:
def __add_widget_timetable(self, timetable_tab):
table_frame = ttk.Frame(feat_tab)
table_frame.pack(fill=BOTH, expand=True)
self.__make_grid(table_frame)
注意你是如何传递一个框架(timetable_tab
),创建另一个标签(table_frame
),并将创建的框架放在其他框架(feat_tab
)中。
似乎有些不对劲。我的猜测是table_frame
应该是timetable_tab
的孩子。