|
发表于 2021-2-24 12:06:48
|
显示全部楼层
本帖最后由 来自星星的小明 于 2021-2-24 12:13 编辑
在python中,所有的类都直接或间接继承自Object类,定义了类之后就定义了一个命名空间,里面定义的属性可以通过类名来引用。新定义的类中有一些Object中有的属性,可以在其中定义其他变量或者函数。实例化之后会创建一个对象,该对象脱胎于类,并且其中的属性动态地和类中的属性产生关联。
python类中的方法函数指的是通过类的实例化对象调用的函数,方法函数的第一个形参表示类的实例化对象,通常写成self
执行 app = Window(root)
app.get_image(filename='bg.jpg', width=1600, height=900)
时就相当于执行Window.get_image(app, filename='bg.jpg', width=1600, height=900)
上面是关于self的用法,感觉你还是混淆的,我直接给你改了吧,你可以对比的看一下,还有什么问题可以接着留言:
from tkinter import*
from PIL import Image, ImageTk
class Window(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master = master
self.pack(fill=BOTH, expand=1)
self.imgs = {
"微信": "wechat.png",
"支付宝": "alipay.png",
}
variable = StringVar()
variable.set("支付方式")
canvas_root=Canvas(root,width=1600,height=900)
im_root=self.get_image(r'C:/Users/me/Desktop/bg.jpg',1600,900) #此处的路径是背景图片的地址
canvas_root.create_image(800,450,image=im_root)
canvas_root.pack()
menu = OptionMenu(canvas_root, variable, *self.imgs.keys(), command=self.set_image) #这里你调用的这个函数,需要一个参数呀!我没看明白你这个函数是干嘛用的
menu.place(x=800,y=150)
text_label=Label(canvas_root,text="欢迎进入支付系统",font=("华康少女字体",20),fg="green").place(x=740,y=10)
def set_image(self, val):
load = Image.open(self.imgs.get(val))
render = ImageTk.PhotoImage(load)
img = Label(self, image=render)
img.image = render
img.place(x=450, y=200)
def get_image(self,filename,width,height):
im = Image.open(filename).resize((width,height))
self.photo = ImageTk.PhotoImage(im)
return self.photo
root = Tk()
app = Window(root)
root.title("支付系统")
root.geometry("1600x900")
root.resizable(width=False, height=False)
root.mainloop() |
|