Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python tkinter中的条目小部件未定义_Python_Python 3.x_Database_Sqlite_Tkinter - Fatal编程技术网

Python tkinter中的条目小部件未定义

Python tkinter中的条目小部件未定义,python,python-3.x,database,sqlite,tkinter,Python,Python 3.x,Database,Sqlite,Tkinter,我正在处理一个带有图形界面的数据库,我创建了一个连接到数据库的插入和删除方法,现在我正在创建一个搜索方法,但不幸的是没有处理意外错误。代码有点长: import sqlite3 from Tkinter import * global all,root, main_text, num_ent, nom_ent, search_ent def showall(): all = True con = sqlite3.connect("repertoire.db"

我正在处理一个带有图形界面的数据库,我创建了一个连接到数据库的插入和删除方法,现在我正在创建一个搜索方法,但不幸的是没有处理意外错误。代码有点长:

import sqlite3
from Tkinter import *
global all,root, main_text, num_ent, nom_ent, search_ent

def showall():
    all = True
    con = sqlite3.connect("repertoire.db")
    cur = con.cursor()
    request = 'select * from blinta'
    cur.execute(request)
    table = str(cur.fetchall()).replace(')', '\n').replace('(', '').replace(',', '').replace('[', '').replace(']', '')
    return table
    con.commit()
    con.close()


def delete():
    con = sqlite3.connect("repertoire.db")
    cur = con.cursor()
    request = ' DELETE FROM blinta WHERE id=?'
    cur.execute(request, (ident.get(),))
    con.commit()
    con.close()
    main_text.configure(state='normal')
    main_text.delete(1.0, END)
    main_text.insert(1.0, showall())
    main_text.configure(state='disabled')
    ident.delete(0,END)


def insert():
    con = sqlite3.connect("repertoire.db")
    cur = con.cursor()
    request = 'insert into blinta (nom,numero) values(?,?)'
    cur.execute(request, (nom_ent.get(), num_ent.get()))
    con.commit()
    con.close()
    main_text.config(state='normal')
    main_text.delete(1.0, END)
    main_text.insert(1.0, showall())
    main_text.config(state='disabled')
    num_ent.delete(0, END)
    nom_ent.delete(0, END)

def search():
    all=False
    con = sqlite3.connect("repertoire.db")
    cur = con.cursor()
    request = "select * from blinta where nom = ?"
    noun = search_ent.get()
    args=(noun,)
    cur.execute(request,args)
    selected = str(cur.fetchall()).replace(')', '\n').replace('(', '').replace(',', '').replace('[', '').replace(']', '')
    return selected
    con.commit()
    con.close()

root = Tk()
root.config(bg='#D2B024')
root.geometry('450x650+900+0')
root.minsize(450, 650)
root.maxsize(450, 650)
main_text = Text(root, bg='#CBCAC5', fg='black', width=30, height=40, state='normal')
main_text.grid(column=1, row=1, rowspan=50, padx=9, pady=3)
main_text.delete(1.0, END)
if all == True :
    main_text.insert(1.0, showall())
else :
    main_text.insert(1.0, search())
main_text.config(state='disabled')

nomlbl=Label(root,text='Enter noun to insert',bg='#D2B024').grid(row=1,column=2)

nom_ent = Entry(root)
nom_ent.grid(row=2, column=2)

num_lbl=Label(root, text='Enter number to insert', bg='#D2B024').grid(row=3, column=2)

num_ent = Entry(root)
num_ent.grid(row=4, column=2)

insert_btn = Button(relief='flat', fg='black', width=7,
                    text='insert', font=("heveltica Bold", 15),
                    command=insert).grid(row=5, column=2,
                                         columnspan=2, padx=50)
Label(root,text='_______________________',bg='#D2B024').grid(row=6,column=2)

idlbl=Label(root,text='Enter id to delete',bg='#D2B024').grid(row=7,column=2)
ident=Entry(root)
ident.grid(row=8,column=2)

delete_btn = Button(relief='flat', fg='black', width=7,
                    text='delete', font=("heveltica Bold", 15),
                    command=delete).grid(row=9, column=2,
                                         columnspan=2, padx=0)
Label(root,text='_______________________',bg='#D2B024').grid(row=10,column=2)

search_lbl=Label(root,text='Enter noun to search',bg='#D2B024').grid(row=11,column=2)

search_btn = Button(relief='flat', fg='black', width=7,
                    text='search', font=("heveltica Bold", 15),
                    command=search).grid(row=13, column=2,
                                         columnspan=2, padx=0)

global search_ent
search_ent = Entry(root)
search_ent.grid(row=12, column=2)

root.mainloop()
所有问题都与搜索功能有关,其中未定义条目搜索,我确信它位于全局范围内 错误是:

Traceback (most recent call last):
File "C:/Users/asus/Documents/python/Projet/managment system/main.py", line 
70, in <module>
main_text.insert(1.0, search())
File "C:/Users/asus/Documents/python/Projet/managment system/main.py", line 
51, in search
noun = search_ent.get()
NameError: name 'search_ent' is not defined
回溯(最近一次呼叫最后一次):
文件“C:/Users/asus/Documents/python/Projet/management system/main.py”,第行
70,在
main_text.insert(1.0,search())
文件“C:/Users/asus/Documents/python/Projet/management system/main.py”,第行
51,搜索中
noun=search\u ent.get()
名称错误:未定义名称“搜索”

我稍微重新分配了您的代码,它似乎可以工作。我更改了
根目录
搜索内容
主文本
的位置,现在它位于函数之前,因此不会出现错误

import sqlite3
from tkinter import *
global all,root, main_text, num_ent, nom_ent, search_ent

global search_ent
root = Tk()
root.config(bg='#D2B024')
root.geometry('450x650+900+0')
root.minsize(450, 650)
root.maxsize(450, 650)
search_ent = Entry(root)
search_ent.grid(row=12, column=2)

main_text = Text(root, bg='#CBCAC5', fg='black', width=30, height=40, state='normal')
main_text.grid(column=1, row=1, rowspan=50, padx=9, pady=3)
main_text.delete(1.0, END)
def showall():
    all = True
    con = sqlite3.connect("repertoire.db")
    cur = con.cursor()
    request = 'select * from blinta'
    cur.execute(request)
    table = str(cur.fetchall()).replace(')', '\n').replace('(', '').replace(',', '').replace('[', '').replace(']', '')
    return table
    con.commit()
    con.close()


def delete():
    con = sqlite3.connect("repertoire.db")
    cur = con.cursor()
    request = ' DELETE FROM blinta WHERE id=?'
    cur.execute(request, (ident.get(),))
    con.commit()
    con.close()
    main_text.configure(state='normal')
    main_text.delete(1.0, END)
    main_text.insert(1.0, showall())
    main_text.configure(state='disabled')
    ident.delete(0,END)


def insert():
    con = sqlite3.connect("repertoire.db")
    cur = con.cursor()
    request = 'insert into blinta (nom,numero) values(?,?)'
    cur.execute(request, (nom_ent.get(), num_ent.get()))
    con.commit()
    con.close()
    main_text.config(state='normal')
    main_text.delete(1.0, END)
    main_text.insert(1.0, showall())
    main_text.config(state='disabled')
    num_ent.delete(0, END)
    nom_ent.delete(0, END)

def search():
    all=False
    con = sqlite3.connect("repertoire.db")
    cur = con.cursor()
    request = "select * from blinta where nom = ?"
    noun = search_ent.get()
    args=(noun,)
    cur.execute(request,args)
    selected = str(cur.fetchall()).replace(')', '\n').replace('(', '').replace(',', '').replace('[', '').replace(']', '')
    return selected
    con.commit()
    con.close()
insert_btn = Button(relief='flat', fg='black', width=7,
                    text='insert', font=("heveltica Bold", 15),
                    command=insert).grid(row=5, column=2,
                                         columnspan=2, padx=50)
Label(root,text='_______________________',bg='#D2B024').grid(row=6,column=2)

idlbl=Label(root,text='Enter id to delete',bg='#D2B024').grid(row=7,column=2)
ident=Entry(root)
ident.grid(row=8,column=2)

delete_btn = Button(relief='flat', fg='black', width=7,
                    text='delete', font=("heveltica Bold", 15),
                    command=delete).grid(row=9, column=2,
                                         columnspan=2, padx=0)
Label(root,text='_______________________',bg='#D2B024').grid(row=10,column=2)

search_lbl=Label(root,text='Enter noun to search',bg='#D2B024').grid(row=11,column=2)

search_btn = Button(relief='flat', fg='black', width=7,
                    text='search', font=("heveltica Bold", 15),
                    command=search).grid(row=13, column=2,
                                         columnspan=2, padx=0)





if all == True :
    main_text.insert(1.0, showall())
else :
    main_text.insert(1.0, search())
main_text.config(state='disabled')

nomlbl=Label(root,text='Enter noun to insert',bg='#D2B024').grid(row=1,column=2)

nom_ent = Entry(root)
nom_ent.grid(row=2, column=2)

num_lbl=Label(root, text='Enter number to insert', bg='#D2B024').grid(row=3, column=2)

num_ent = Entry(root)
num_ent.grid(row=4, column=2)


root.mainloop()

您可以为搜索功能提供输入。全局语句用于外部作用域。例如,当您想在另一个函数中生成一个函数时。你可以
现在谈谈你的代码。这里有一个简单的方式,我已经说了这个想法:

import sqlite3
from tkinter import *
global all,root, main_text, num_ent, nom_ent, search_ent

def showall():
    all = True
    con = sqlite3.connect("repertoire.db")
    cur = con.cursor()
    request = 'select * from blinta'
    cur.execute(request)
    table = str(cur.fetchall()).replace(')', '\n').replace('(', '').replace(',', '').replace('[', '').replace(']', '')
    return table
    con.commit()
    con.close()


def delete():
    con = sqlite3.connect("repertoire.db")
    cur = con.cursor()
    request = ' DELETE FROM blinta WHERE id=?'
    cur.execute(request, (ident.get(),))
    con.commit()
    con.close()
    main_text.configure(state='normal')
    main_text.delete(1.0, END)
    main_text.insert(1.0, showall())
    main_text.configure(state='disabled')
    ident.delete(0,END)


def insert():
    con = sqlite3.connect("repertoire.db")
    cur = con.cursor()
    request = 'insert into blinta (nom,numero) values(?,?)'
    cur.execute(request, (nom_ent.get(), num_ent.get()))
    con.commit()
    con.close()
    main_text.config(state='normal')
    main_text.delete(1.0, END)
    main_text.insert(1.0, showall())
    main_text.config(state='disabled')
    num_ent.delete(0, END)
    nom_ent.delete(0, END)

def search(search_ent):
    all=False
    con = sqlite3.connect("repertoire.db")
    cur = con.cursor()
    request = "select * from blinta where nom = ?"
    noun = search_ent.get()
    args=(noun,)
    cur.execute(request,args)
    selected = str(cur.fetchall()).replace(')', '\n').replace('(', '').replace(',', '').replace('[', '').replace(']', '')
    return selected
    con.commit()
    con.close()

root = Tk()
root.config(bg='#D2B024')
root.geometry('450x650+900+0')
root.minsize(450, 650)
root.maxsize(450, 650)
main_text = Text(root, bg='#CBCAC5', fg='black', width=30, height=40, state='normal')
main_text.grid(column=1, row=1, rowspan=50, padx=9, pady=3)
main_text.delete(1.0, END)
search_ent = Entry(root)
search_ent.grid(row=12, column=2)
if all == True :
    main_text.insert(1.0, showall())
else :
    main_text.insert(1.0, search(search_ent))
main_text.config(state='disabled')

nomlbl=Label(root,text='Enter noun to insert',bg='#D2B024').grid(row=1,column=2)

nom_ent = Entry(root)
nom_ent.grid(row=2, column=2)

num_lbl=Label(root, text='Enter number to insert', bg='#D2B024').grid(row=3, column=2)

num_ent = Entry(root)
num_ent.grid(row=4, column=2)

insert_btn = Button(relief='flat', fg='black', width=7,
                    text='insert', font=("heveltica Bold", 15),
                    command=insert).grid(row=5, column=2,
                                         columnspan=2, padx=50)
Label(root,text='_______________________',bg='#D2B024').grid(row=6,column=2)

idlbl=Label(root,text='Enter id to delete',bg='#D2B024').grid(row=7,column=2)
ident=Entry(root)
ident.grid(row=8,column=2)

delete_btn = Button(relief='flat', fg='black', width=7,
                    text='delete', font=("heveltica Bold", 15),
                    command=delete).grid(row=9, column=2,
                                         columnspan=2, padx=0)
Label(root,text='_______________________',bg='#D2B024').grid(row=10,column=2)

search_lbl=Label(root,text='Enter noun to search',bg='#D2B024').grid(row=11,column=2)

search_btn = Button(relief='flat', fg='black', width=7,
                    text='search', font=("heveltica Bold", 15),
                    command=lambda: search(search_ent)).grid(row=13, column=2,
                                         columnspan=2, padx=0)

root.mainloop()

仔细检查
search()

search
功能中放入
global search\ent
。如果需要从函数中访问和更改全局变量的值,此权限也将通过函数中的global关键字授予。请提供。也发布完整的回溯。您是否在
search\u ent=Entry(root)
之前定义了一个按钮,如
button(…,command=search(),…)
?回溯显示行
main\u text.insert(1.0,search())
导致错误,因为当上面的行调用
search()
时,尚未定义搜索内容。请注意,
all
是一个内置函数,因此
if all==True
将被计算为false,因此将执行else块。
table=str(cur.fetchall()).replace('),'\n').replace('(','').replace(','').replace(','').replace('[','').replace('],'')
这一行可以替换为更简单的术语,如使用索引,您可以访问每个术语并循环搜索它们
全局搜索\u ent
搜索()中不是必需的
OP case.yup中的函数,这是不必要的,因为我在搜索函数中编写了它,并且总是相同的错误。我编辑了答案并发布了完整的回溯。如果您描述您更改的内容,这个答案会更好。否则,我们必须逐行逐字符地将您的代码与原始代码进行比较。
search\u btn=Butt在(…,command=search(search_ent))
应该是
search_btn=Button(…,command=lambda:search(search_ent))
。顺便说一句,不需要传递
search_ent
。@acw1668是的,谢谢我刚刚编辑了那一行。谢谢你的关注。