Python Tkinter - 如何在 Canvas 中包含小部件?
Python Tkinter - How to contain a widget within a Canvas?
我正在尝试在 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
尺寸的图像部分,其余部分可以滚动。
您必须使用 create_image
将图像放在 canvas 上并使其可滚动。您不能使用 pack
或 place
或 grid
。您不需要先将图像放入标签中,除非您特别希望它是带边框的标签。在这种情况下,您需要使用 create_window
将标签添加到 canvas.
我正在尝试在 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
尺寸的图像部分,其余部分可以滚动。
您必须使用 create_image
将图像放在 canvas 上并使其可滚动。您不能使用 pack
或 place
或 grid
。您不需要先将图像放入标签中,除非您特别希望它是带边框的标签。在这种情况下,您需要使用 create_window
将标签添加到 canvas.