【问题标题】:Python Tkinter - Extend Scrollbar from East to West Border of the Frame CanvasPython Tkinter - 将滚动条从框架画布的东边界延伸到西边界
【发布时间】:2019-06-18 04:41:04
【问题描述】:

我有一个名为 self.canvas_input_frame 的画布,其中有一个名为 self.canvas_input_image 的画布。 self.canvas_input_image 是实际显示图像的位置。我已将子元素垂直和水平滚动条附加到self.canvas_input_frame。我的 GUI 如下图所示:

水平滚动条不完全从西向东延伸。如何解决?以下是我的代码:

 def open_file_dialog(self):

    self.filename = filedialog.askopenfilename(initialdir = "C:/Users/alyss/AppData/Local/Programs/Python/Python36/Damaged Text Document Virtual Restoration", title = "Select A File", filetype =  (("png", "*.png"),("jpeg", "*.jpg"),  ("pdf", "*.pdf"), ))


    #Create Canvas Frame for Input Document
    self.canvas_input_frame = tk.Canvas(self.main_canvas,  bg = "blue")
    self.canvas_input_frame.configure(width=456, height=470)       
    self.canvas_input_frame.pack(side="left", padx=10,pady = 10)

    #Load Input Image
    load = Image.open(self.filename)      
    render = ImageTk.PhotoImage(load)
    self.width, self.height = load.size

    self.canvas_input_image = tk.Canvas(self.canvas_input_frame,bg = "green") # how to render image in canvas
    self.canvas_input_image.configure(width=390, height=470)
    self.canvas_input_image.image = render
    self.canvas_input_image.create_image(0,0,anchor="nw",image=self.canvas_input_image.image)
    self.canvas_input_image.pack(side="left")


    self.vsb_canvas_input_frame = tk.Scrollbar( self.canvas_input_frame, orient="vertical", command=self.canvas_input_image.yview)
    self.hsb_canvas_input_frame  = tk.Scrollbar( self.canvas_input_frame, orient="horizontal", command=self.canvas_input_image.xview)
    self.canvas_input_image.config(yscrollcommand=self.vsb_canvas_input_frame.set,xscrollcommand=self.hsb_canvas_input_frame.set)
    self.vsb_canvas_input_frame.pack(side = "right", fill = "y")
    self.hsb_canvas_input_frame.pack(side = "bottom", fill = "x")        
    self.canvas_input_image.config(scrollregion = self.canvas_input_image.bbox("all"))

【问题讨论】:

  • 我认为你的问题是包装订单,你已经在left 上包装了你的self.canvas_input_image,所以当你在底部包装滚动条时,它不能低于图像。如果不能解决问题,请分享mvce代码。
  • @Kamal -- 谢谢你,我尝试编辑 .pack 文件并将其替换为 self.canvas_input_frame.place(x=10,y =90)。问题仍然存在。我会尝试分享一个工作代码。
  • 我建议尝试按原样打包 canvas_input_frame,并将其他元素的顺序更改为:1)“右”上的 vsb_canvas_input_frame 2)“下”上的 hsb_canvas_input_frame 3)“左”上的 canvas_input_image。
  • @Kamal - 哇,谢谢。有效。改变顺序就可以了。您可以将您的答案放在答案部分,以便我将其标记为正确。

标签: python python-3.x tkinter scrollbar tkinter-canvas


【解决方案1】:

这里的问题是包装小部件的顺序。如果您更改包装元素的顺序,如下所示,那么它可以获得您预期的视图。

self.vsb_canvas_input_frame.pack(side = "right", fill = "y")
self.hsb_canvas_input_frame.pack(side = "bottom", fill = "x")
self.canvas_input_image.pack(side="left")

理解pack 方法的一种方法是,如果您将widget1 包装在“左”中,则任何其他元素只能放在其相对的“右”侧(而不是左、上或下)。类似的逻辑也适用于其他方面..

【讨论】:

    猜你喜欢
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 2014-03-15
    • 1970-01-01
    • 2023-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多