Я, начинающий программист, делаю программу просто для удовольствия, но я столкнулся с проблемой, при которой, когда пользователь заполняет столбец «Roll No» и нажимает кнопку поиска, появляется новое окно с текстом виджет, заполненный некоторыми связанными данными, которые будут извлечены через базу данных.
Я сделал отдельную функцию для создания нового окна ("new_window"), и при нажатии кнопки поиска функция поиска сначала вызовет "new_window" "тогда после выполнения функции" new_window "функция" search "будет извлекать данные из базы данных sqlite и заполнять данные в текстовом виджете, объявленном в" new_window ".
Я даже сделал переменную в функции" new_window "как global, но тогда он также не решен, и я даже попытался показать "привет" в текстовом виджете нового окна, но он также не отображается.
Пожалуйста, расскажите, как решить эту проблему или сделать это лучше путь . Благодарю вас, искренне Ришаб Рагвендра :)
Widgets.py
import tkinter as t
import sqlite3 as s
search_b=None
delete_b=None
update_b=None
roll_no_e=None
name_e=None
roll_no_l=None
name_l=None
search_b=None
conn=None
c=None
name_e_n=None
roll_no_e_n=None
text_widget=None
class Widgets:
def __init__(self,root_name=None,root_name_p=None):
global conn,c
self.root_name=root_name
self.root_name_p=root_name_p
def buttons(self):
#Buttons
global search_b,delete_b,update_b
buttons=["Search","Delete","Update"]
search_b=t.Button(self.root_name_p,text=buttons[0],padx=6,pady=5,font='Segoe 12',command=search)
delete_b=t.Button(self.root_name_p,text=buttons[1],padx=6,pady=5,font='Segoe 12')
update_b=t.Button(self.root_name_p,text=buttons[2],padx=6,pady=5,font='Segoe 12')
# Packing_Buttons
search_b.pack(padx=15,pady=1,side='left') #12,10,14
update_b.pack(padx=15,pady=10,side='left')
delete_b.pack(padx=15,pady=13,anchor='s')
def entry(self):
global roll_no_e,name_e
#Frame
e_frame=t.Frame(self.root_name,bg='pink')
e_frame.pack(side='right')
#Entry widgets
roll_no_e=t.Entry(e_frame,borderwidth=2,font='Segoe 12')
name_e=t.Entry(e_frame,borderwidth=2,font='Segoe 12')
#Packing Entry widgets
roll_no_e.pack(pady=3)
name_e.pack(pady=3)
def label(self):
#Frame
l_frame=t.Frame(self.root_name,bg='pink')
l_frame.pack(side='left')
#Label
label=["Roll No:","Name:"]
self.roll_no_l=t.Label(l_frame,text=label[0],padx=2,pady=2,bg="pink",font='Segoe 12')
self.name_l=t.Label(l_frame,text=label[1],padx=2,pady=2,bg="pink",font='Segoe 12')
#Label
self.roll_no_l.pack(pady=2,padx=15) #,side='left'
self.name_l.pack_configure(pady=2,padx=15)
def connection_sql():
global conn,c
#SQL connection
conn=s.connect("real_database.db")
#SQL cursor
c=conn.cursor()
def new_window(inp_list=None):
global roll_no_e_n,name_e_n,text_widget
root1=t.Tk()
root1.geometry("300x300")
# root1.maxsize("300","300")
# root1.minsize("300","300")
#top frame for new window
t_frame=t.Frame(root1)
t_frame.pack(side='top',pady=9)
#Frame
l_frame=t.Frame(t_frame)
l_frame.pack(side='left')
#Label
label=["Roll No:","Name:"]
roll_no_l=t.Label(l_frame,text=label[0],padx=2,pady=2,font='Segoe 12')
name_l=t.Label(l_frame,text=label[1],padx=2,pady=2,font='Segoe 12')
#Label
roll_no_l.pack(pady=2,padx=15) #,side='left'
name_l.pack_configure(pady=2,padx=15)
#Frame
e_frame=t.Frame(t_frame)
e_frame.pack(side='right')
#Entry widgets
roll_no_e_n=t.Entry(e_frame,borderwidth=2,font='Segoe 12')
name_e_n=t.Entry(e_frame,borderwidth=2,font='Segoe 12')
#Packing Entry widgets
roll_no_e_n.pack(pady=3)
name_e_n.pack(pady=3)
#Text widget
text_widget=t.Text(root1,height=10,width=15)
text_widget.pack()
root1.mainloop()
def search():
global text_widget
new_window()
conn=s.connect("real_database.db")
#SQL cursor
c=conn.cursor()
with conn:
roll=int(roll_no_e.get())
c.execute("SELECT * FROM rel")
text_widget.insert(0,'hi')
front_end.py aka main file
import tkinter as t
import widgets as w
from PIL import ImageTk,Image
root=t.Tk()
root.geometry("500x500")
root.iconbitmap("C:/Users/risha/Desktop/cam/Bandi_project/Resources/heart1.ico")
bg_image=ImageTk.PhotoImage(Image.open("C:/Users/risha/Desktop/cam/Bandi_project/Resources/background_image.jpg"))
# root._configure(image=bg_image)
# t.Canvas.create_image(0,0,image=bg_image,anchor=NW)
my_label=t.Label(root,image=bg_image,height=20)
my_label.place(x=0,y=0,relwidth=1,relheight=1)
my_frame=t.Frame(root,background="pink",height=200,width=200)
in_frame=t.Frame(my_frame,background="pink")
my_frame.place(relx=0.5,rely=0.5,anchor='center')
in_frame.pack(side='top')
widgets=w.Widgets(in_frame,my_frame)
widgets.label()
widgets.entry()
widgets.buttons()
root.mainloop()