Python 为什么赢了';tkinter小部件是否随画布滚动?
我正在为我的ML项目创建一个gui,但是我无法成功地创建一个实际工作的垂直滚动条。这是我的密码Python 为什么赢了';tkinter小部件是否随画布滚动?,python,tkinter,Python,Tkinter,我正在为我的ML项目创建一个gui,但是我无法成功地创建一个实际工作的垂直滚动条。这是我的密码 import tkinter as tk import tkinter.filedialog from PIL import ImageTk, Image class App: def __init__(self, master): frame = tk.Frame(master,width=500,height=500) frame.pack() self.
import tkinter as tk
import tkinter.filedialog
from PIL import ImageTk, Image
class App:
def __init__(self, master):
frame = tk.Frame(master,width=500,height=500)
frame.pack()
self.canvas=tk.Canvas(frame,width=500, height=500,borderwidth=0,highlightthickness=0,background='white',scrollregion=(0,0,500,800))
self.canvas.pack()
vbar=tk.Scrollbar(self.canvas,orient="vertical")
vbar.pack(side="right",fill="y")
vbar.config(command=self.canvas.yview)
self.canvas.config(yscrollcommand=vbar.set)
self.canvas.bind("<Configure>",lambda e:self.canvas.configure(scrollregion=self.canvas.bbox('all')))
root.minsize(500,500)
self.button = tk.Button(self.canvas,
text="QUIT", fg="red",
command=frame.quit)
self.button.pack()
self.button2 = tk.Button(self.canvas,
text="Display image",
command=self.Display_image)
self.button2.pack()
def Display_image(self):
f = tkinter.filedialog.askopenfilename(
parent=root, initialdir='D:/Test',
title='Choose file',
filetypes=[('bmp images', '.bmp')]
)
image = ImageTk.PhotoImage(Image.open(f))
l1 = tkinter.Label(self.canvas, image=image)
l1.image = image
l1.pack()
root = tk.Tk()
app = App(root)
root.mainloop()
将tkinter作为tk导入
导入tkinter.filedialog
从PIL导入ImageTk,图像
类应用程序:
定义初始(自我,主):
框架=传统框架(主框架,宽度=500,高度=500)
frame.pack()
self.canvas=tk.canvas(frame,width=500,height=500,borderwidth=0,highlightthickness=0,background='white',scrollregion=(0,0500800))
self.canvas.pack()
vbar=tk.Scrollbar(self.canvas,orient=“vertical”)
vbar.pack(side=“right”,fill=“y”)
vbar.config(命令=self.canvas.yview)
self.canvas.config(yscrollcommand=vbar.set)
self.canvas.bind(“,lambda e:self.canvas.configure(scrollregion=self.canvas.bbox('all'))
root.minsize(500500)
self.button=tk.button(self.canvas,
text=“退出”,fg=“红色”,
command=frame.quit)
self.button.pack()
self.button2=tk.Button(self.canvas,
text=“显示图像”,
命令=self.Display\u图像)
self.button2.pack()
def显示图像(自身):
f=tkinter.filedialog.askopenfilename(
parent=root,initialdir='D:/Test',
title='Choose file',
文件类型=[('bmp图像','.bmp')]
)
image=ImageTk.PhotoImage(image.open(f))
l1=tkinter.Label(self.canvas,image=image)
l1.image=图像
l1.pack()
root=tk.tk()
app=app(根目录)
root.mainloop()
该代码确实创建了一个滚动条,但不起作用。但是,当我将这行代码
self.canvas.create_rectangle((0,050080))
包含在代码中时,矩形会滚动。您应该使用。。create_image(…)
而不是标签中的图像。你不应该使用.pack
/.grid
/.place
当小部件的父对象是
对象时,如果你想要一个可滚动的框架,请看@TheLizzard。非常感谢,我能够创建应用程序。你能解释一下为什么我不应该使用.pack
?@ShifanAbbastkinter
有tkinter.Frame
,它应该像一个容器,你可以.pack
/.grid
/.place
小部件。另一方面,tkinter.Canvas
应该用于绘制形状和移动精灵。它确实支持将小部件放置在其内部,但不支持使用.pack
/.grid
/.place
但使用创建窗口(,窗口=)