Tkinter Python中的双滚动条
我无法让x和y滚动条与Python一起在Tkinter中工作,尽管我遵循了多个示例: 滚动条会出现,但当窗口小于框架时不会激活。我怎样才能让它工作(见下图) 下面是产生我的问题的最小代码(Python 3.7)Tkinter Python中的双滚动条,python,tkinter,scrollbar,Python,Tkinter,Scrollbar,我无法让x和y滚动条与Python一起在Tkinter中工作,尽管我遵循了多个示例: 滚动条会出现,但当窗口小于框架时不会激活。我怎样才能让它工作(见下图) 下面是产生我的问题的最小代码(Python 3.7) 将tkinter作为tk导入 从tkinter导入ttk 大字体=(“Arial”,50) 类DoubleScrollbarFrame(ttk.Frame): 定义初始化(自我, 父母亲 *args, **kwargs): self.parent=parent super()
将tkinter作为tk导入
从tkinter导入ttk
大字体=(“Arial”,50)
类DoubleScrollbarFrame(ttk.Frame):
定义初始化(自我,
父母亲
*args,
**kwargs):
self.parent=parent
super()。\uuuuu init\uuuuuu(self.parent,
*args,
**kwargs)
#设置小部件以填充主窗口,使其
#都一样大
self.columnconfigure(0,权重=1)
self.rowconfigure(0,权重=1)
self.create_widgets()
self.position_widgets()
def创建_小部件(自):
self.canvas=tk.canvas(self)
self.frame=ttk.frame(self.canvas)
self.scroll_x=ttk.Scrollbar(self,
方向=tk.水平,
command=self.canvas.xview)
self.scroll_y=ttk.Scrollbar(self,
方向=垂直,
command=self.canvas.yview)
self.canvas.config(xscrollcommand=self.scroll_x.set,
yscrollcommand=self.scroll\u y.set)
self.canvas.create_窗口((0,0),
window=self.frame,
锚点='nw')
self.frame.bind(“”,
自我设置(区域)
self.sizegrip=ttk.sizegrip(self)
#试验
self.test1=tk.Label(self.frame,
text=‘测试1’,
字体=大字体)
self.test2=tk.标签(self.frame,
text=‘测试2’,
字体=大字体)
self.test3=tk.标签(self.frame,
text=‘测试3’,
字体=大字体)
def位置_小部件(自身,
**kwargs):
self.test1.grid(行=0,
列=0,
粘性='w')
self.test2.grid(行=1,
列=0,
粘性='w')
self.test3.grid(行=2,
列=0,
粘性='w')
自滚动网格(行=1,
列=0,
粘性='ew')
自滚动y网格(行=0,
列=1,
粘性='ns')
self.canvas.grid(行=0,
列=0,
粘性='nsew')
self.frame.grid(行=0,
列=0,
粘性='nsew')
self.sizegrip.grid(行=1,
列=1,
粘性='se')
def set_滚动区域(自,
事件):
打印('Frame Dimensions:{}x{}'。格式(self.Frame.winfo_width(),
self.frame.winfo_height())
打印('Canvas Dimensions:{}x{}'。格式(self.Canvas.winfo_width(),
self.canvas.winfo_height())
configure(scrollregion=self.canvas.bbox('all'))
类MainApp(tk.tk):
定义初始化(自我,
*args,
**kwargs):
super(),
**kwargs)
#设置小部件以填充主窗口,使其
#都一样大
self.columnconfigure(0,权重=1)
self.rowconfigure(0,权重=1)
self.create_widgets()
self.position_widgets()
def创建_小部件(自):
self.frame=双滚动条框架(self)
def位置_小部件(自身):
self.frame.grid(行=0,
列=0,
粘性='nsew')
def出口(自):
自我毁灭
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
#创建GUI
root=MainApp()
#运行程序
root.mainloop()
问题在于DoubleScrollbarFrame中的这些代码行。定位小部件
:
self.frame.grid(row = 0,
column = 0,
sticky = 'nsew')
这将从画布中删除对小部件的控制,并将控制权授予网格
。它不再是画布对象,因此self.canvas.bbox(“全部”)
将返回(0,0,1,1)
。如果滚动区域设置不正确,滚动条不知道滚动多少
解决方案很简单:不要在self.frame
上调用grid
?例如,您是否验证了scrollregion
是否已更新为正确的值?请不要问“奖金”问题-一个好问题只会问一个问题。@BryanOakley我删除了奖金问题,添加了对我查看的链接的引用,并在set\u scrollregion
中添加了打印输出。该方法仅输出:框架尺寸:193 x 243画布尺寸:1 x 1
,在调整窗口大小时不会重新打印。您没有回答是否已验证滚动区域
是否正确更新的问题。@BryanOakley如何验证滚动区域
是否正确更新?请告诉我怎么做,太棒了!非常感谢。这个现在很好用。我阅读了Alejandro Rodas的Tkinter GUI应用程序开发烹饪书,他说“……我们没有调用任何几何管理器来绘制框架,因为create_window()
方法为我们做了这件事。”我不知道调用几何管理器
self.frame.grid(row = 0,
column = 0,
sticky = 'nsew')