Получение ошибки: 'недопустимое имя команды ".! Frame.! Frame.! Frame2.! Entry" в tkinter - PullRequest
0 голосов
/ 05 августа 2020

Я, начинающий программист, делаю программу просто для удовольствия, но я столкнулся с проблемой, при которой, когда пользователь заполняет столбец «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()
...