首页 > 解决方案 > 我正在尝试将 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()

输出不显示图像。

标签: pythontkinterbuttonwidget

解决方案


推荐阅读