【问题标题】:Python Tkinter - How to contain a widget within a Canvas?Python Tkinter - 如何在画布中包含小部件?
【发布时间】:2020-08-15 19:44:55
【问题描述】:

我试图在Canvas 中放置一个与Canvas 具有相同宽度但高度取决于纵横比的图像,并使用Scrollbar 滚动相同的图像。这是代码的相关部分。

#Canvas and Scrollbar
img_canvas = Canvas(main_frame, height = height, width = width+15)
vsb = Scrollbar(img_canvas, orient = 'vertical')
vsb.pack(side = 'right', fill = 'y')
vsb.configure(command = img_canvas.yview)
canvas.config(yscrollcommand = vsb.set)
text.window_create("end", window = img_canvas)
text.insert("end", "\n")

#Insert Image into the Canvas
im = Image.open(str(opath)+"//Ques_"+str(temp)+".png")
w, h = im.size
im = im.resize((width, int((h/w)*width)), Image.ANTIALIAS)
img = ImageTk.PhotoImage(im)
ques = Label(img_canvas, image = img)
ques.image = img
ques.pack(side = 'left', expand = False)

我遇到的问题是图像在y 中完全展开,因此无法滚动。 我想包含适合Canvas 尺寸的图像部分,其余部分可以滚动。

【问题讨论】:

  • canvas.create_window() 就是你要找的东西
  • 感谢您的快速回复!你能详细说明一下吗?我试过这个img_canvas.create_window(0, 0, window = ques),但现在似乎什么都没有显示。
  • 但是如果你使用标签只显示图像这也可能很有趣stackoverflow.com/a/43009579/13629335
  • @Atlas435:不一定。如果他们只想在画布上放置图像,您可以不使用Labelcreate_window

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


【解决方案1】:

您必须使用create_image 将图像放在画布上并使其可滚动。您不能使用packplacegrid。您不需要先将图像放入标签中,除非您特别希望它是带边框的标签。在这种情况下,您需要使用create_window 将标签添加到画布。

【讨论】:

  • 我还有一个疑问,因为所有这些都进入了Text 小部件,我应该如何放置Scrollbar?据我所知Frame 不会插入TextScrollbar 不能将Canvas 作为父级。
  • @AST:滚动条可以有一个画布作为父级。如果滚动条正在滚动画布,您不想这样做。你的问题很不清楚。您正在将图像放在文本小部件的画布中的标签中。为什么不直接将图像添加到文本小部件,或者为什么将画布添加到文本小部件?您对所有这些小部件的最终目标是什么?恐怕你让事情变得比需要的复杂得多。
  • @Bryan Oakley,很抱歉不清楚,非常感谢您的帮助。这是图像 ibb.co/qr4349m> 的链接,它具有我想要的布局。我正在使用循环将相同的布局(在左侧)一个接一个地插入到文本小部件中,最终可以滚动。
  • @Bryan Oakley,经过一段时间的尝试,我成功地将Canvas插入Text,然后在左侧包装另一个Text小部件,在左侧包装Scrollbar对,进入画布。然后我将图像插入Text。很想知道您是否可以提出一种更有效的方法来做同样的事情。
  • @AST:您可以将任何小部件插入到文本小部件中:画布、框架等。此外,还可以直接支持添加图像,而无需其他小部件来保存它。
猜你喜欢
  • 2011-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
相关资源
最近更新 更多