Python Tkinter-如何在画布中包含小部件?

Python Tkinter-如何在画布中包含小部件?,python,python-3.x,tkinter,tkinter-canvas,Python,Python 3.x,Tkinter,Tkinter Canvas,我试图在画布中放置一个图像,该图像与画布具有相同的宽度,但高度取决于纵横比,并使用滚动条滚动相同的宽度。这是代码的相关部分 #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

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

#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
中完全展开,因此无法滚动。

我想包含图像中适合
画布
尺寸的部分,其余部分可以滚动。

您必须使用
创建图像
将图像放置在画布上并使其可滚动。您不能使用
pack
place
grid
。您不需要首先将图像放入标签中,除非您特别希望它是带有边框的标签。在这种情况下,您需要使用
create\u window
将标签添加到画布。

您必须使用
create\u image
将图像放置在画布上并使其可滚动。您不能使用
pack
place
grid
。您不需要首先将图像放入标签中,除非您特别希望它是带有边框的标签。在这种情况下,您需要使用
create\u window
将标签添加到画布中。

canvas.create\u window()
是快速回复的关键!你能详细说明一下吗?我尝试了这个
img\u canvas.create\u window(0,0,window=ques)
但现在似乎什么都没有显示。可能会有帮助,但如果你使用标签只显示图像,这可能也很有趣@Atlas435:不一定。如果他们只想在画布上放置图像,则无需使用
标签
创建窗口
画布即可。创建窗口()
是您想要的快速回复!你能详细说明一下吗?我尝试了这个
img\u canvas.create\u window(0,0,window=ques)
但现在似乎什么都没有显示。可能会有帮助,但如果你使用标签只显示图像,这可能也很有趣@Atlas435:不一定。如果他们只想在画布上放置图像,你可以不用
标签和
创建窗口
。我还有一个疑问,因为所有这些都将进入
文本
小部件,我应该如何放置
滚动条
?据我所知,
Frame
不能插入到
Text
中,
Scrollbar
不能将
Canvas
作为父对象。@AST:滚动条可以将Canvas作为父对象。如果滚动条正在滚动画布,则不希望这样做。你的问题很不清楚。您正在将图像放入文本小部件画布中的标签中。为什么不直接将图像添加到文本小部件,或者为什么要将画布添加到文本小部件?使用所有这些小部件的最终目标是什么?“恐怕你把事情弄得比实际需要的更复杂了。”布莱恩·奥克利,为不清楚道歉,我真的很感谢你的帮助。这是一个图片的链接,这是我想要的布局。我正在使用循环将相同的布局(左侧)一个接一个地插入到文本小部件中,最终可以滚动。@Bryan Oakley,尝试了一段时间后,我成功地将
画布插入到
文本中,然后将左侧的另一个
文本
小部件和右侧的
滚动条
打包到画布中。然后我将图像插入到
文本中。我很想知道你是否可以建议一种更有效的方法来做同样的事情。@AST:你可以将任何小部件插入文本小部件:画布、框架等。此外,还可以直接支持添加图像,而不需要另一个小部件来保存。我还有一个疑问,因为所有这些都将进入一个
text
小部件,我应该如何放置
滚动条
?据我所知,
Frame
不能插入到
Text
中,
Scrollbar
不能将
Canvas
作为父对象。@AST:滚动条可以将Canvas作为父对象。如果滚动条正在滚动画布,则不希望这样做。你的问题很不清楚。您正在将图像放入文本小部件画布中的标签中。为什么不直接将图像添加到文本小部件,或者为什么要将画布添加到文本小部件?使用所有这些小部件的最终目标是什么?“恐怕你把事情弄得比实际需要的更复杂了。”布莱恩·奥克利,为不清楚道歉,我真的很感谢你的帮助。这是一个图片的链接,这是我想要的布局。我正在使用循环将相同的布局(左侧)一个接一个地插入到文本小部件中,最终可以滚动。@Bryan Oakley,尝试了一段时间后,我成功地将
画布插入到
文本中,然后将左侧的另一个
文本
小部件和右侧的
滚动条
打包到画布中。然后我将图像插入到
文本中。我很想知道您是否可以建议一种更有效的方法来做同样的事情。@AST:您可以将任何小部件插入文本小部件:画布、框架等。另外,还可以直接支持添加图像,而不需要另一个小部件来保存它。