python - 我正在尝试将 png 图像添加到按钮,但图片没有出现在按钮上
问题描述
我正在尝试将 png 图像添加到 window2 类中的第一个按钮,但它会减小按钮的大小而不会出现图像。该代码不会引发任何错误,但我试图放在按钮上的 png 图像不会显示。
from tkinter import *
import sqlite3 as sq
from PIL import Image,ImageTk
from tkinter import messagebox
from tkinter import ttk
import random
import time
import datetime
def main():
root = Tk()
app = Window1(root)
root.mainloop()
conn = sq.connect("Student_record.db")
c = conn.cursor()
class Window1:
def __init__(self, master):
self.master = master
self.master.title("Student Login System")
self.master.geometry("1350x750+0+0")
self.master.config(bg ='powder blue')
self.frame = Frame(self.master, bg ='powder blue')
self.frame.pack()
self.Username = StringVar()
self.Password = StringVar()
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
self.lblTitle = Label(self.frame, text='Student Login system', font=("arial", 50, "bold"), bg="powder blue")
self.lblTitle.grid(row=0, column=0, columnspan=2, pady=40)
self.Loginframe1 = LabelFrame(self.frame, width=1350, height=600, font=('arial', 20, 'bold'),
relief='ridge', bg='cadet blue', bd=20)
self.Loginframe1.grid(row=1, column=0)
self.Loginframe2 = LabelFrame(self.frame, width=1000, height=600, font=('arial', 20, 'bold'),
relief='ridge', bg='cadet blue', bd=20)
self.Loginframe2.grid(row=2, column=0)
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++Frames for holding buttons,label and entry++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
self.username_label = Label(self.Loginframe1, text="Usernamee", font=('arial', 20, 'bold')
, bd=20, bg='cadet blue', fg='cornsilk')
self.username_label.grid(row=0, column=0)
self.username = Entry(self.Loginframe1, font=('arial', 20, 'bold')
, textvariable=self.Username)
self.username.grid(row=0, column=1,padx = 10)
self.password_label = Label(self.Loginframe1,text="Usernamee", font=('arial', 20, 'bold')
, bd=20, bg='cadet blue', fg='cornsilk')
self.password_label.grid(row=1, column=0, padx=10)
self.password = Entry(self.Loginframe1, font=('arial', 20, 'bold')
,textvariable=self.Password, show="*")
self.password.grid(row=1, column=1,pady=3)
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++labels and entry for login+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
self.submit_btn = Button(self.Loginframe2, text='Login', width=17,
font=('arial', 20, 'bold'), command = self.submit2)
self.submit_btn.grid(row=3, column=0, pady=20, padx=8)
self.btnReset = Button(self.Loginframe2, text='Reset',
font=('arial', 20, 'bold'), width=17)
self.btnReset.grid(row=3, column=1, pady=20, padx=8)
self.btnExit = Button(self.Loginframe2, text='Exit', width=17,
font=('arial', 20, 'bold'))
self.btnExit.grid(row=3, column=2, pady=20, padx=8)
def submit2(self):
u = (self.Username.get())
p = (self.Password.get())
if (u == ('dera') and p == str(12345)):
self.newWindow = Toplevel(self.master)
self.app = Window2(self.newWindow)
else:
messagebox.showerror("Incorrect login details")
def new_window(self):
self.newWindow = Toplevel(self.master)
self.app = Window2(self.newWindow)
class Window2:
def __init__(self, master):
self.master = master
self.master.title("Resturant Management System")
self.master.geometry("1350x750+0+0")
self.master.config(bg="cadet blue")
self.frame1 = Frame(self.master, bg="powder blue")
self.frame1.pack()
self.welcome_lab = Label(self.frame1, text="Student's Record Management System", font=("arial", 50, "bold"), bg="powder blue")
self.welcome_lab.grid(row=0, column=0, columnspan=2, pady=40)
photo=PhotoImage(file='Fishy.png')
photoimage = photo.subsample(3,3)
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
self.Panholderframe = LabelFrame(self.frame1, width=1350, height=600, font=('arial', 20, 'bold'),
`enter code here` relief='ridge', bg='cadet blue', bd=20)
self.Panholderframe.grid(row=1, column=0)
#+++++++++++++++++++++++++++++++++++++++++++++++Panholdingframe++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
self.student_reg_but = ttk.Button(self.Panholderframe, text="Register student",
command = self.Student_Registeration_window)
self.student_reg_but.grid(row = 0,column = 1,padx = 10,pady=5)
self.student_reg_but.config(image=photo, compound=LEFT)
self.student_reg_but.config(image=photoimage)
self.student_view_but = Button(self.Panholderframe, text="View students information", fg='grey', activeforeground='white',
height=15, width=40, font=("arial", 10, "bold italic"))
self.student_view_but.grid(row = 0,column = 2,padx = 10,pady=5)
self.update_record_but = Button(self.Panholderframe, text="Update record", activebackground='grey', activeforeground='white',
height=15, width=40, font=("arial", 10, "bold italic"))
self.update_record_but.grid(row = 0,column = 3,padx = 10,pady=5)
self.delete_record_but = Button(self.Panholderframe, text="Delete record", activebackground='grey', activeforeground='white',
height=15, width=40, font=("arial", 10, "bold italic"))
self.delete_record_but.grid(row = 1,column = 1,padx = 10,pady=5)
self.student_result_view_but = Button(self.Panholderframe, text="View students result", activebackground='grey',
activeforeground='white', height=15, width=40,
font=("arial", 10, "bold italic"))
self.student_result_view_but.grid(row = 1,column = 2,padx = 10,pady=5)
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Main screen buttons++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#Student registeration+++++++++++++++++++++++++++++++++++++++++++
def Student_Registeration_window(self):
self.newWindow_reg = Toplevel(self.master)
self.app_reg = Window3(self.newWindow_reg)
class Window3:
def __init__(self, master):
self.master = master
self.master.title("Student Information Management Panel")
self.master.geometry("1350x750+0+0")
self.master.config(bg="cadet blue")
self.frame2 = Frame(self.master, bg="powder blue")
self.frame2.pack()
self.welcome_lab1 = Label(self.frame2, text="Student's Record Registeration Panel", font=("arial", 50, "bold"),
bg="powder blue")
self.welcome_lab1.grid(row=0, column=0, columnspan=2, pady=40)
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
self.Panholderframe1 = LabelFrame(self.frame2, width=1350, height=600, font=('arial', 20, 'bold'),
relief='ridge', bg='cadet blue', bd=20)
self.Panholderframe1.grid(row=1, column=0)
# +++++++++++++++++++++++++++++++++++++++++++++++Panholdingframe++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
self.f_name = Entry(self.Panholderframe1, width=50)
self.f_name.place(x=600, y=90)
self.l_name = Entry(self.Panholderframe1, width=50)
self.l_name.place(x=600, y=130)
self.address = Entry(self.Panholderframe1, width=50)
self.address.place(x=600, y=170)
self.state_of_origin = Entry(self.Panholderframe1, width=50)
self.state_of_origin.place(x=600, y=210)
self.LGA = Entry(self.Panholderframe1, width=50)
self.LGA.place(x=600, y=260)
self.department = Entry(self.Panholderframe1, width=50)
self.department.place(x=600, y=300)
self.reg_num = Entry(self.Panholderframe1, width=50)
self.reg_num.place(x=600, y=340)
self.course_of_study = Entry(self.Panholderframe1, width=50)
self.course_of_study.place(x=600, y=380)
self.faculty = Entry(self.Panholderframe1, width=50)
self.faculty.place(x=600, y=420)
self.f_name_label = Label(self.Panholderframe1, text="First Name", font=("arial", 15, "bold italic"),bg='cadet blue').place(x=450, y=80)
self.l_name_label = Label(self.Panholderframe1, text="Last Name", font=("arial", 15, "bold italic"),bg='cadet blue').place(x=450, y=129)
self.address_label = Label(self.Panholderframe1, text="Address", font=("arial", 15, "bold italic"),bg='cadet blue').place(x=450, y=169)
self.state_label = Label(self.Panholderframe1, text="State of origin", font=("arial", 15, "bold italic"),bg='cadet blue').place(x=450, y=209)
self.LGA_label = Label(self.Panholderframe1, text="LGA", font=("arial", 15, "bold italic"),bg='cadet blue').place(x=450, y=259)
self.department_label = Label(self.Panholderframe1, text="Department", font=("arial", 15, "bold italic"),bg='cadet blue').place(x=450, y=299)
self.reg_label = Label(self.Panholderframe1, text="Reg Number", font=("arial", 15, "bold italic"),bg='cadet blue').place(x=450, y=339)
self.course_label = Label(self.Panholderframe1, text="Course", font=("arial", 15, "bold italic"),bg='cadet blue').place(x=450, y=379)
self.faculty_label = Label(self.Panholderframe1, text="Faculty", font=("arial", 15, "bold italic"),bg='cadet blue').place(x=450, y=419)
self.btnsumit = Button(self.Panholderframe1, text='Submit', width=8,
font=('arial', 20, 'bold'),command = self.Student_form_submit)
self.btnsumit.place(x=480, y=450)
self.btnReseet = Button(self.Panholderframe1, text='Reset',
font=('arial', 20, 'bold'), width=8, command=self.StudentReg_reset)
self.btnReseet.place(x=630, y=450)
self.btnExiit = Button(self.Panholderframe1, text='Cancel', width=8,
font=('arial', 20, 'bold'),command = self.Student_reg_exit)
self.btnExiit.place(x=780, y=450)
def Student_form_submit(self):
# Create a database or connect to one
conn = sq.connect("Student_record.db")
# create a cursor to use in pointing to the db
c = conn.cursor()
c.execute("INSERT INTO Student_record VALUES (:f_name, :l_name, :address, :state_of_origin, :LGA, :department ,"
" :reg_num , :course , :faculty)",
{
'f_name': self.f_name.get(),
'l_name': self.l_name.get(),
'address': self.address.get(),
'state_of_origin': self.state_of_origin.get(),
'LGA': self.LGA.get(),
'department': self.department.get(),
'reg_num': self.reg_num.get(),
'course': self.course_of_study.get(),
'faculty': self.faculty.get(),
})
# commit changes
conn.commit()
# close connnection
conn.close()
def Student_reg_exit(self):
self.master.destroy()
#+++++++++++++++++++++++++++++++++++++++++++++++++Entries and label for student details++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
def StudentReg_reset(self):
self.f_name.delete(0, END)
self.l_name.delete(0, END)
self.address.delete(0, END)
self.state_of_origin.delete(0, END)
self.LGA.delete(0, END)
self.department.delete(0, END)
self.reg_num.delete(0, END)
self.course_of_study.delete(0, END)
self.faculty.delete(0, END)
#+++++++++++++++++++++++++++++++++++++++++++++++sumit,cancel and reset Buttons for students registeration+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
conn.commit()
# close connnection
conn.close()
if __name__ == '__main__':
main()
输出不显示图像。
解决方案
推荐阅读
- pandas - 如何通过查找另一个字符串位置来对数据框中的字符串进行切片,并且每行的位置值都不同?
- iis - asp页面中的错误500,Response_Buffer_Limit_Exceeded,查找导致它的操作
- javascript - Froala 编辑器未显示链接的编辑/插入/取消链接选项
- mysql - 我在使用内部联接的 mysql 更新查询中遇到错误
- javascript - 有没有办法检测特定味精的味精反应?
- python - 正则表达式仅包括“-”和“。”的第一次遇到。
- angular7 - 如何在不使用ng2-file uploader之类的插件的情况下以角度上传多个文件
- asp.net-core - 如何根据客户端权限而不是广播来过滤数据?
- amazon-web-services - 如何使用 Unity AWS SDK for DynamoDB 在 x.io 中修复“错误从 AWS 解组响应,响应正文:未知错误”
- reason - 在 Reason-React 中使用 React 片段的语法是什么