首页 > 解决方案 > 水平滚动条未放置在我想要的位置

问题描述

我正在尝试创建一个简单的 python GUI 应用程序。我正确添加了垂直滚动条并且它运行良好,但是现在我正在尝试添加一个水平滚动条,它正在运行但它的位置都搞砸了,我已经尝试了包几何管理器,它只是没有给我所需的输出,我想要画布内窗口底部的水平滚动条。

这是我遇到问题的代码部分...

        self.frame_2 = Frame(self, bg='skyblue',)
        self.frame_2.place(x=0, y=150)

        self.canvas = Canvas(self.frame_2, bg='orange', height=200, width=300,)
        self.canvas.pack(side='left',expand=True,fill=BOTH)

        self.win_in_can = Frame(self.canvas, bg='orange')

        self.myscrollbar = Scrollbar(self.frame_2,orient=VERTICAL,command=self.canvas.yview)
        self.myscrollbar_h = Scrollbar(self.frame_2, orient=HORIZONTAL, command=self.canvas.xview)
        self.canvas.configure(xscrollcommand=self.myscrollbar_h.set, yscrollcommand=self.myscrollbar.set)

        self.myscrollbar.pack(side='right', fill='y')
        self.myscrollbar_h.pack(side='left',fill='x')

        self.canvas.create_window((0, 0), window=self.win_in_can, anchor='nw')
        self.win_in_can.bind("<Configure>", lambda e: self.canvas.configure(scrollregion=self.canvas.bbox("all")))

标签: pythontkinter

解决方案


仅在打包滚动条(水平和垂直)后才打包画布

def __init__(self):
    super().__init__()
    self.frame_2 = Frame(self, bg='skyblue',)
    self.frame_2.place(x=0, y=150)
    self.canvas = Canvas(self.frame_2, bg='orange', height=200, width=300,)
    
    self.win_in_can = Frame(self.canvas, bg='orange')

    self.myscrollbar = Scrollbar(self.frame_2,orient=VERTICAL,command=self.canvas.yview)
    self.myscrollbar_h = Scrollbar(self.frame_2, orient=HORIZONTAL, command=self.canvas.xview)
    self.canvas.configure(xscrollcommand=self.myscrollbar_h.set, yscrollcommand=self.myscrollbar.set)
    self.canvas.create_window((0, 0), window=self.win_in_can, anchor='nw')
    self.win_in_can.bind("<Configure>", lambda e: self.canvas.configure(scrollregion=self.canvas.bbox("all")))
    self.myscrollbar.pack(side=RIGHT, fill='y')
    self.myscrollbar_h.pack(side=BOTTOM,fill='x')
    self.canvas.pack(side='left',expand=True,fill=BOTH)
    for i in range(100):
        Button(self.win_in_can,text=str(i)).pack()

推荐阅读