两个按钮在 csv 问题中打开相同的 table?
Both buttons opens same table in csv problem?
这是两个按钮
second_year_icon = tk.PhotoImage(file = r"D:\Academy Management Application\Iconsnd_year_icon.png")
global second_year_btn
second_year_btn = tk.Button(label_frame, font=LARGE_FONT, image=second_year_icon,
border=0 ,command=lambda : controller.show_frame(second_year) )
second_year_btn.grid(row=0 , column =0, padx=(10,10) , pady=(10,0), sticky=tk.E)
first_year_icon=tk.PhotoImage(file = r"D:\Academy Management
Application\Iconsst_year_icon.png")
global first_year_btn
first_year_btn = tk.Button(label_frame, font=LARGE_FONT, image=first_year_icon
, command=lambda : controller.show_frame(second_year), border=0 )
first_year_btn.grid(row=0 , column =1, padx=(10,10) , pady=(10,0), sticky=tk.E)
现在,如果单击 first_year_btn,它也会在我单击 second_year_btn 时显示相同的数据。我知道我犯了一些愚蠢的错误,但不知道是哪一个。我很紧张。任何人都可以帮助我吗?
reader = DictReader(f, delimiter=',')
for row in reader:
if first_year_btn:
if row['Class Name'] == '09th':
registration_no= row['Registration No']
student_name = row['Student Name']
f_name = row['Father Name']
gender = row['Gender']
class_name =row['Class Name']
class_session =row['Class Session']
admission_date =row['Admission Date']
monthly_fee = row['Monthly Fee']
dues_payment=row['Dues']
tree.insert("", 0, values=(registration_no, student_name, f_name,gender,class_name,class_session,admission_date,monthly_fee,dues_payment))
elif second_year_btn :
if row['Class Name'] == 'Second Year':
registration_no = row['Registration No']
student_name = row['Student Name']
f_name = row['Father Name']
gender = row['Gender']
class_name = row['Class Name']
class_session = row['Class Session']
admission_date = row['Admission Date']
monthly_fee = row['Monthly Fee']
dues_payment = row['Dues']
tree.insert("", 0, values=(
registration_no, student_name, f_name, gender, class_name, class_session, admission_date,
monthly_fee, dues_payment))
遵循这种结构,MainFrameClass 是您的旧class,它来自库或为您创建一个旧框架。它有一些在该框架内使用的变量。您的任务是创建新的 class,将旧的继承为新的。创建新方法,通过该方法您只能更改要在框架内更改的那些变量。
class MainFrameClass:
def __init__(self, name):
self.name = name
def say_hi(self):
print("Hi, I am " + self.name)
class UpdatedClass(MainFrameClass):
def show_name(self):
print("Hi, I am " + self.name)
def update_name(self,new_name):
self.name = new_name
x = MainFrameClass("Old Variable Data Coming from Old Class")
y = UpdatedClass("New Variable Data Given to New Class")
y.show_name()
y.update_name('New Variable Data That was Updated Again')
y.show_name()
下面是一个基于您发布的代码的简单示例:
import tkinter as tk
from tkinter import ttk
from csv import DictReader
class App(tk.Tk):
def __init__(self):
super().__init__()
mainframe = tk.Frame(self)
mainframe.pack(fill=tk.BOTH, expand=1)
mainframe.rowconfigure(0, weight=1)
mainframe.columnconfigure(0, weight=1)
self.frames = {}
for f in (main_page, second_year):
frame = f(mainframe, self)
frame.grid(row=0, column=0, sticky='nsew')
self.frames[f] = frame
self.show_frame(main_page)
def show_frame(self, fclass):
frame = self.frames[fclass]
frame.tkraise()
return frame
class main_page(tk.Frame):
def __init__(self, parent, controller):
super().__init__(parent)
self.controller = controller
label_frame = tk.Frame(self)
label_frame.pack(fill=tk.BOTH, expand=1)
first_year_button = tk.Button(label_frame, text='First Year',
width=20, command=lambda: self.select_year(1))
first_year_button.grid(row=0, column=0, padx=10, pady=(10,0))
second_year_button = tk.Button(label_frame, text='Second Year',
width=20, command=lambda: self.select_year(2))
second_year_button.grid(row=0, column=1, padx=10, pady=(10,0))
def select_year(self, year):
frame = self.controller.show_frame(second_year)
frame.set_year(year)
class second_year(tk.Frame):
def __init__(self, parent, controller):
super().__init__(parent)
columns = ('Reg #', 'Student Name', 'Father Name', 'Gender',
'Class', 'Session', 'Admin. Fee', 'Monthly Fee', 'Dues')
self.tree = ttk.Treeview(self, show='headings', columns=columns)
self.tree.pack(fill=tk.BOTH, expand=1)
for col in columns:
self.tree.heading(col, text=col)
self.tree.column(col, width=100, anchor='c')
def set_year(self, year):
if year == 1:
filter = '09th'
elif year == 2:
filter = 'Second Year'
else:
filter = None
if filter:
with open('registration.csv', newline='') as f:
reader = DictReader(f, delimiter=',')
for row in reader:
if row['Class Name'] == filter:
registration_no= row['Registration No']
student_name = row['Student Name']
f_name = row['Father Name']
gender = row['Gender']
class_name = row['Class Name']
class_session = row['Class Session']
admission_date = row['Admission Date']
monthly_fee = row['Monthly Fee']
dues_payment = row['Dues']
self.tree.insert('', 0, values=(registration_no, student_name, f_name, gender,
class_name, class_session, admission_date,
monthly_fee, dues_payment))
app = App()
app.mainloop()
这是两个按钮
second_year_icon = tk.PhotoImage(file = r"D:\Academy Management Application\Iconsnd_year_icon.png")
global second_year_btn
second_year_btn = tk.Button(label_frame, font=LARGE_FONT, image=second_year_icon,
border=0 ,command=lambda : controller.show_frame(second_year) )
second_year_btn.grid(row=0 , column =0, padx=(10,10) , pady=(10,0), sticky=tk.E)
first_year_icon=tk.PhotoImage(file = r"D:\Academy Management
Application\Iconsst_year_icon.png")
global first_year_btn
first_year_btn = tk.Button(label_frame, font=LARGE_FONT, image=first_year_icon
, command=lambda : controller.show_frame(second_year), border=0 )
first_year_btn.grid(row=0 , column =1, padx=(10,10) , pady=(10,0), sticky=tk.E)
现在,如果单击 first_year_btn,它也会在我单击 second_year_btn 时显示相同的数据。我知道我犯了一些愚蠢的错误,但不知道是哪一个。我很紧张。任何人都可以帮助我吗?
reader = DictReader(f, delimiter=',')
for row in reader:
if first_year_btn:
if row['Class Name'] == '09th':
registration_no= row['Registration No']
student_name = row['Student Name']
f_name = row['Father Name']
gender = row['Gender']
class_name =row['Class Name']
class_session =row['Class Session']
admission_date =row['Admission Date']
monthly_fee = row['Monthly Fee']
dues_payment=row['Dues']
tree.insert("", 0, values=(registration_no, student_name, f_name,gender,class_name,class_session,admission_date,monthly_fee,dues_payment))
elif second_year_btn :
if row['Class Name'] == 'Second Year':
registration_no = row['Registration No']
student_name = row['Student Name']
f_name = row['Father Name']
gender = row['Gender']
class_name = row['Class Name']
class_session = row['Class Session']
admission_date = row['Admission Date']
monthly_fee = row['Monthly Fee']
dues_payment = row['Dues']
tree.insert("", 0, values=(
registration_no, student_name, f_name, gender, class_name, class_session, admission_date,
monthly_fee, dues_payment))
遵循这种结构,MainFrameClass 是您的旧class,它来自库或为您创建一个旧框架。它有一些在该框架内使用的变量。您的任务是创建新的 class,将旧的继承为新的。创建新方法,通过该方法您只能更改要在框架内更改的那些变量。
class MainFrameClass:
def __init__(self, name):
self.name = name
def say_hi(self):
print("Hi, I am " + self.name)
class UpdatedClass(MainFrameClass):
def show_name(self):
print("Hi, I am " + self.name)
def update_name(self,new_name):
self.name = new_name
x = MainFrameClass("Old Variable Data Coming from Old Class")
y = UpdatedClass("New Variable Data Given to New Class")
y.show_name()
y.update_name('New Variable Data That was Updated Again')
y.show_name()
下面是一个基于您发布的代码的简单示例:
import tkinter as tk
from tkinter import ttk
from csv import DictReader
class App(tk.Tk):
def __init__(self):
super().__init__()
mainframe = tk.Frame(self)
mainframe.pack(fill=tk.BOTH, expand=1)
mainframe.rowconfigure(0, weight=1)
mainframe.columnconfigure(0, weight=1)
self.frames = {}
for f in (main_page, second_year):
frame = f(mainframe, self)
frame.grid(row=0, column=0, sticky='nsew')
self.frames[f] = frame
self.show_frame(main_page)
def show_frame(self, fclass):
frame = self.frames[fclass]
frame.tkraise()
return frame
class main_page(tk.Frame):
def __init__(self, parent, controller):
super().__init__(parent)
self.controller = controller
label_frame = tk.Frame(self)
label_frame.pack(fill=tk.BOTH, expand=1)
first_year_button = tk.Button(label_frame, text='First Year',
width=20, command=lambda: self.select_year(1))
first_year_button.grid(row=0, column=0, padx=10, pady=(10,0))
second_year_button = tk.Button(label_frame, text='Second Year',
width=20, command=lambda: self.select_year(2))
second_year_button.grid(row=0, column=1, padx=10, pady=(10,0))
def select_year(self, year):
frame = self.controller.show_frame(second_year)
frame.set_year(year)
class second_year(tk.Frame):
def __init__(self, parent, controller):
super().__init__(parent)
columns = ('Reg #', 'Student Name', 'Father Name', 'Gender',
'Class', 'Session', 'Admin. Fee', 'Monthly Fee', 'Dues')
self.tree = ttk.Treeview(self, show='headings', columns=columns)
self.tree.pack(fill=tk.BOTH, expand=1)
for col in columns:
self.tree.heading(col, text=col)
self.tree.column(col, width=100, anchor='c')
def set_year(self, year):
if year == 1:
filter = '09th'
elif year == 2:
filter = 'Second Year'
else:
filter = None
if filter:
with open('registration.csv', newline='') as f:
reader = DictReader(f, delimiter=',')
for row in reader:
if row['Class Name'] == filter:
registration_no= row['Registration No']
student_name = row['Student Name']
f_name = row['Father Name']
gender = row['Gender']
class_name = row['Class Name']
class_session = row['Class Session']
admission_date = row['Admission Date']
monthly_fee = row['Monthly Fee']
dues_payment = row['Dues']
self.tree.insert('', 0, values=(registration_no, student_name, f_name, gender,
class_name, class_session, admission_date,
monthly_fee, dues_payment))
app = App()
app.mainloop()