我有一个画布(因为ttk.Frame
没有xview
,yview
方法)在其中保存框架,我想水平浏览它们,因为它们在同一行中。找到了一些教程,当他们处理不同的小部件组合时,我遵循了它们,并尝试将它们应用于我的问题,但没有成功。我确实看到了一个滚动条,但它不执行任何操作或响应任何内容。
class App:
def __init__(self,db):
self.db = db
self.root = tkinter.Tk()
self.masterframe = ttk.Frame(self.root)
self.masterframe.grid()
self.mastercanvas = tkinter.Canvas(self.masterframe)
self.mastercanvas.grid()
self.scrollbar = ttk.Scrollbar(self.masterframe,orient="horizontal",
command = self.mastercanvas.xview)
self.scrollbar.grid()
self.mastercanvas.configure(xscrollcommand=self.scrollbar.set)
for i,e in enumerate(self.db.elements):
xf = XFrame(self,e)
xf.grid(row=0,column=i,sticky="n")
编辑:
class XFrame:
def __init__(self,app,x):
self.app = app
self.x = x
self.frame = ttk.Frame(self.app.mastercanvas)
self.set_up() # this sets frame's padding and populates it with widgets
现在,无论我在哪里粘贴建议的两行代码* - 在第一个init定义的末尾,或在第二个init定义的末尾 - 没有任何新的事情发生。我看到我的框架按照我的意图出现 - 其中 3 个。第4部分。和一个不起作用的滚动条。
*
self.update_idletasks() # using self.root in first, self.app.root in second variant
self.mastercanvas.configure(scrollregion=self.mastercanvas.bbox("all"))
# in second variant reffered to as self.app.mastercanvas ...