Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tkinter Python中的双滚动条_Python_Tkinter_Scrollbar - Fatal编程技术网

Tkinter Python中的双滚动条

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()

我无法让x和y滚动条与Python一起在Tkinter中工作,尽管我遵循了多个示例:

  • 滚动条会出现,但当窗口小于框架时不会激活。我怎样才能让它工作(见下图)

    下面是产生我的问题的最小代码(Python 3.7)

    将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')