from tkinter import *
from tkinter import ttk
from PIL import ImageTk ,Image
win=tkinter.Toplevel()
wrapper=Frame(win, bd=4, relief=RIDGE, bg="crimson")
wrapper.place(x=0, y=80, width=465, height=625)
wrapper3=Frame(win, bd=4, relief=RIDGE, bg="crimson")
wrapper3.place(x=950, y=80, width=465, height=625)
wrapper3_title=Label(wrapper3, text="Selected Data", bg="crimson", fg="white", font=("times new roman",30,"bold"))
wrapper3_title.grid(row=0,column=0,padx=20, pady=10)
wrapper2=Frame(win, bd=4, relief=RIDGE, bg="crimson")
wrapper2.place(x=465, y=80, width=485, height=625)
ent8=StringVar()
def code():
btn1.destroy()
add=StringVar()
sub=StringVar()
pro=StringVar()
img=ImageTk.PhotoImage(Image.open("Amritsar.jpg"))
Label2= Label(wrapper2, image=img)
Label2.grid(row=0, column=0, padx=10, pady=5, sticky='w')
def Find():
add.set(float(ent00.get())+float(ent01.get()))
sub.set(float(ent00.get())-float(ent01.get()))
pro.set(float(ent00.get())*float(ent01.get()))
ent00=Entry(wrapper, width=15)
ent00.grid(row=4, column=1, padx=10, pady=10, sticky='w')
ent01=Entry(wrapper, width=15)
ent01.grid(row=5, column=1, padx=10, pady=10, sticky='w')
lbl8=Label(wrapper, text="Add", bg="crimson", fg="white", font=("times new roman",15,"bold")).grid(row=6, column=0, padx=20, pady=10, sticky='w')
ent8=Entry(wrapper, textvariable=add, width=15, state='readonly')
ent8.grid(row=6, column=1, padx=10, pady=10, sticky='w')
lbl15=Label(wrapper, text="Subtract", bg="crimson", fg="white", font=("times new roman",15,"bold")).grid(row=7, column=0, padx=20, pady=10, sticky='w')
ent15=Entry(wrapper, textvariable=sub, width=15, state='readonly')
ent15.grid(row=7, column=1, padx=10, pady=10, sticky='w')
lbl9=Label(wrapper, text="Product", bg="crimson", fg="white", font=("times new roman",15,"bold")).grid(row=8, column=0, padx=20, pady=10, sticky='w')
ent9=Entry(wrapper, textvariable=pro, width=15, state='readonly')
ent9.grid(row=8, column=1, padx=10, pady=10, sticky='w')
btn = Button(wrapper, text = 'Calculate', command=Find, bd = '5', width=15, height=2)
btn.grid(row=11, column=1, padx=20, pady=10)
def img():
if ent8.get()=="4":
img=ImageTk.PhotoImage(Image.open("Amritsar.jpg"))
Label2= Label(wrapper3, image=img)
Label2.grid(row=0, column=2, padx=10, pady=5, sticky='w')
print("Move ahead")
else:
print("Try again")
btn2 = Button(wrapper, text = 'Image', command=img, bd = '5', width=15, height=2)
btn2.grid(row=12, column=1, padx=20, pady=10)
btn1 = Button(wrapper, text = 'OPEN CODE', command=code, bd = '5', width=20, height=2)
btn1.grid(row=11, column=1, padx=20, pady=10)
win.geometry("1400x700+250+250")
win.mainloop()
tkinter上需要显示两个图像。前面在wrapper2中定义的一个显示空帧,而在得到4作为总和后必须出现在wrapper3中的一个则根本不出现。此外,打印的输出是“重试”。为什么会这样?当总和为4时,它必须显示“向前移动”。
为标签设置图像后,需要保留对此图像的引用。否则,它将在函数末尾被删除,并且您将丢失图像(它是垃圾收集的)
因此,定义标签时,只需添加一行,将图像存储为标签的属性:
Label2
小部件现在有一个名为.dontloseit
的无意义属性,用于保存图像。现在,它将不会被收集并显示在tkinter小部件中这是特金特的特色之一
首先,可怕的名字。
函数和
PhotoImage
都被命名为img
。将函数重命名为def add_img()
。 第二,看看你的代码,我不知道所有的包装框架都是用来做什么的,为什么不根据它们的计划来命名呢?这同样适用于所有小部件。calc_btn
不是比btn
更好的名字吗img_btn
而不是btn2
?为什么你需要阅读比名字更多的东西才能知道什么是什么第三,在代码中有两次ent8。一次作为标签,另一次作为StringVar
Tkinter会不断刷新窗口,因此您需要保存正在使用的图像。
就我个人而言,我会在课堂上完成所有这些
对于当前代码,只需添加
loaded_img = ImageTk.PhotoImage(Image.open("Amritsar.jpg"))
在使用函数之前,只需使用Label(wrapper3, image=loaded_img)
即可,而不是使用用于打开映像的变量例如:
编辑
以下是完整的代码:
编辑2
更改代码以使用类:
相关问题 更多 >
编程相关推荐