Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么赢了';tkinter小部件是否随画布滚动?_Python_Tkinter - Fatal编程技术网

Python 为什么赢了';tkinter小部件是否随画布滚动?

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.

我正在为我的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.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
?@ShifanAbbas
tkinter
tkinter.Frame
,它应该像一个容器,你可以
.pack
/
.grid
/
.place
小部件。另一方面,
tkinter.Canvas
应该用于绘制形状和移动精灵。它确实支持将小部件放置在其内部,但不支持使用
.pack
/
.grid
/
.place
但使用
创建窗口(,窗口=)