import tkinter as tk from tkinter import messagebox import pymysql def clear(): en1.delete(0, 'end') en2.delete(0, 'end') def create_new_window(): new_window = tk.Toplevel(top) new_window.title('登录成功') new_window.geometry('200x100') label = tk.Label(new_window, text='恭喜您,登录成功!') label.pack() def login(): username = en1.get() password = en2.get() db = pymysql.connect(host='localhost', user='root', passwd='123456', charset='utf8') cursor = db.cursor() cursor.execute("USE dl") sql = "SELECT * FROM users WHERE username='%s'" % username cursor.execute(sql) result = cursor.fetchone() if result is None: messagebox.showerror(title='登录失败', message='用户名错误,登录失败') else: if result[2] != password: messagebox.showerror(title='登录失败', message='密码错误,登录失败') else: create_new_window() db.close() top = tk.Tk() top.title('登录') top.geometry('300x180') label1 = tk.Label(top, text='用户名:', width=6) label1.place(x=50, y=30) en1 = tk.Entry(top, width=20) en1.place(x=100, y=30) label2 = tk.Label(top, text='密码:', width=6) label2.place(x=50, y=60) en2 = tk.Entry(top, width=20, show='*') en2.place(x=100, y=60) bt1 = tk.Button(top, width=10, text='登录', command=login) bt1.place(x=50, y=100) bt2 = tk.Button(top, width=10, text='清除', command=clear) bt2.place(x=170, y=100) top.mainloop() 添加“打开”菜单按钮的功能,当单击“打开”按钮时,在第5关的顶层窗口中显示图片“zsy.jpg”
时间: 2024-03-19 20:44:43 浏览: 140
好的,我们可以添加一个菜单栏,其中包含一个“打开”菜单按钮,单击该按钮后可以打开一个文件选择对话框,选择图片文件后在顶层窗口中显示。
以下是修改后的代码:
```python
import tkinter as tk
from tkinter import messagebox, filedialog
import pymysql
from PIL import Image, ImageTk
def clear():
en1.delete(0, 'end')
en2.delete(0, 'end')
def create_new_window():
new_window = tk.Toplevel(top)
new_window.title('登录成功')
new_window.geometry('200x150')
label = tk.Label(new_window, text='恭喜您,登录成功!')
label.pack()
# 添加一个标签来显示图片
img_path = filedialog.askopenfilename(title='选择图片', filetypes=(('JPEG 文件', '*.jpg'), ('PNG 文件', '*.png')))
if img_path:
img = Image.open(img_path).resize((150, 150))
photo = ImageTk.PhotoImage(img)
label_img = tk.Label(new_window, image=photo)
label_img.photo = photo
label_img.pack()
def login():
username = en1.get()
password = en2.get()
db = pymysql.connect(host='localhost', user='root', passwd='123456', charset='utf8')
cursor = db.cursor()
cursor.execute("USE dl")
sql = "SELECT * FROM users WHERE username='%s'" % username
cursor.execute(sql)
result = cursor.fetchone()
if result is None:
messagebox.showerror(title='登录失败', message='用户名错误,登录失败')
else:
if result[2] != password:
messagebox.showerror(title='登录失败', message='密码错误,登录失败')
else:
create_new_window()
db.close()
top = tk.Tk()
top.title('登录')
top.geometry('300x180')
# 添加一个菜单栏
menubar = tk.Menu(top)
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="打开", command=create_new_window)
menubar.add_cascade(label="文件", menu=filemenu)
top.config(menu=menubar)
label1 = tk.Label(top, text='用户名:', width=6)
label1.place(x=50, y=30)
en1 = tk.Entry(top, width=20)
en1.place(x=100, y=30)
label2 = tk.Label(top, text='密码:', width=6)
label2.place(x=50, y=60)
en2 = tk.Entry(top, width=20, show='*')
en2.place(x=100, y=60)
bt1 = tk.Button(top, width=10, text='登录', command=login)
bt1.place(x=50, y=100)
bt2 = tk.Button(top, width=10, text='清除', command=clear)
bt2.place(x=170, y=100)
top.mainloop()
```
这段代码中,我们添加了一个名为 `menubar` 的菜单栏,其中包含一个名为 `filemenu` 的菜单,该菜单有一个“打开”命令,单击该命令后会调用 `create_new_window()` 函数来显示图片。在 `create_new_window()` 中,我们使用 `filedialog.askopenfilename()` 函数来打开一个文件选择对话框,选择图片文件后使用 PIL 库来打开和缩放图片,并将其显示在顶层窗口中的一个标签中。
注意,我们要在函数 `create_new_window()` 中先调用 `filedialog.askopenfilename()` 来获取图片路径,然后再通过 PIL 库来打开和操作图片。这是因为 Tkinter 中的 `PhotoImage` 对象不支持直接打开和操作图片文件,需要通过 PIL 或类似的库来实现。
阅读全文