#python #tkinter
#python #tkinter
Вопрос:
Я новичок в Python. Я попытался создать окно с помощью canvas (Tkinter), но в нем говорится, что кнопка не определена. Нужно ли заменить кнопку чем-то другим?
Ошибка
Traceback (most recent call last):
File "C:/Users/MY/Desktop/Courier-management/project.py", line 240, in <module>
canvas.create_window(320, 60, window = button)
NameError: name 'button' is not defined
from tkinter import *
from tkinter import messagebox as ms
from tkinter import ttk
import sqlite3
import random
# Database
with sqlite3.connect('Akash5.db') as db:
c = db.cursor()
try:
c.execute('CREATE TABLE IF NOT EXISTS user (username TEXT NOT NULL ,password TEX NOT NULL,mobile TEX NOT NULL);')
except:
pass
db.commit()
db.close()
class main:
def __init__(self,master):
self.master = master
self.username = StringVar()
self.password = StringVar()
self.n_username = StringVar()
self.n_password = StringVar()
self.n_reg=StringVar()
self.n_mobile=StringVar()
self.mobile11=StringVar()
self.widgets()
def login(self):
with sqlite3.connect('Akash5.db') as db:
c = db.cursor()
# Find user If there is any take proper action
find_user = ('SELECT * FROM user WHERE username = ? and password = ?')
c.execute(find_user,[(self.username.get()),(self.password.get())])
result = c.fetchall()
if result:
self.track()
else:
ms.showerror('Oops!','Username Not Found.')
def new_user(self):
with sqlite3.connect('Akash5.db') as db:
c = db.cursor()
if self.n_username.get()!=' ' and self.n_password.get()!=' ' and self.n_mobile.get()!=' ':
find_user = ('SELECT * FROM user WHERE username = ?')
c.execute(find_user,[(self.n_username.get())])
if c.fetchall():
ms.showerror('Error!','Username Taken Try a Diffrent One.')
else:
insert = 'INSERT INTO user(username,password,mobile) VALUES(?,?,?)'
c.execute(insert,[(self.n_username.get()),(self.n_password.get()),(self.n_mobile.get())])
db.commit()
ms.showinfo('Success!','Account Created!')
self.log()
else:
ms.showerror('Error!','Please Enter the details.')
def consignment(self):
try:
with sqlite3.connect('Akash5.db') as db:
c = db.cursor()
# Find user If there is any take proper action
find_user = ('SELECT * FROM user WHERE mobile= ?')
c.execute(find_user,[(self.mobile11.get())])
result = c.fetchall()
if result:
self.track()
self.crff.pack_forget()
self.head['text'] = self.username.get() 'n Your Product Details'
self.consi.pack()
else:
ms.showerror('Oops!','Mobile Number Not Found.')
except:
ms.showerror('Oops!','Mobile Number Not Found.')
def track1(self):
self.consi.pack_forget()
self.head['text'] = self.username.get() 'n Track your Product'
self.crff.pack()
def log(self):
self.username.set('')
self.password.set('')
self.crf.pack_forget()
self.head['text'] = 'Login'
self.logf.pack()
def cr(self):
self.n_username.set('')
self.n_password.set('')
self.logf.pack_forget()
self.head['text'] = 'Create Account'
self.crf.pack()
def track(self):
self.logf.pack_forget()
self.head['text'] = self.username.get() 'n Track your Product'
self.crff.pack()
def widgets(self):
self.head = Label(self.master,text = 'LOGIN',font = ('',20),pady = 10)
self.head.pack()
self.logf = Frame(self.master,padx =10,pady = 10)
self.logf.configure(background='lightblue')
# PhotoImage(self.logf,file = 'lpu_logo.png')
Label(self.logf,text = 'Username: ',font = ('',15),pady=5,padx=5).grid(sticky = W)
Entry(self.logf,textvariable = self.username,bd = 3,font = ('',15)).grid(row=0,column=1)
Label(self.logf,text = 'Password: ',font = ('',15),pady=5,padx=5).grid(sticky = W)
Entry(self.logf,textvariable = self.password,bd = 3,font = ('',15),show = '*').grid(row=1,column=1)
Button(self.logf,text = ' Login ',background='lightgrey',bd = 2 ,font = ('',13),padx=6,pady=6,command=self.login).grid(row=8,column=0)
Button(self.logf,text = ' New user ',background='lightgrey',bd = 2 ,font = ('',13),padx=6,pady=6,command=self.cr).grid(row=8,column=1)
self.logf.pack()
self.crf = Frame(self.master,padx =10,pady = 10)
Label(self.crf,text = 'Username: ',font = ('',15),pady=5,padx=5).grid(sticky = W)
Entry(self.crf,textvariable = self.n_username,bd = 3,font = ('',15)).grid(row=0,column=1)
Label(self.crf,text = 'Password: ',font = ('',15),pady=5,padx=5).grid(sticky = W)
Entry(self.crf,textvariable = self.n_password,bd = 3,font = ('',15),show = '*').grid(row=1,column=1)
Label(self.crf,text = 'Reg No.: ',font = ('',15),pady=5,padx=5).grid(sticky = W)
Entry(self.crf,textvariable = self.n_reg,bd = 3,font = ('',15)).grid(row=2,column=1)
Label(self.crf,text = 'Gender: ',font = ('',15),pady=5,padx=5).grid(sticky = W)
var = IntVar()
R1 = Radiobutton(self.crf, text="Male", variable=var, value=1).grid(sticky=W)
R2 = Radiobutton(self.crf, text="Female", variable=var, value=2 ).grid(row=4,column=1)
Label(self.crf,text = 'Mobile No.: ',font = ('',15),pady=5,padx=5).grid(sticky = W)
Entry(self.crf,textvariable = self.n_mobile,bd = 3,font = ('',15)).grid(row=5,column=1)
Label(self.crf,text = 'Email Id: ',font = ('',15),pady=5,padx=5).grid(sticky = W)
Entry(self.crf,bd = 3,font = ('',15)).grid(row=6,column=1)
Button(self.crf,text = 'Create Account',background='lightgrey',bd = 2,font = ('',13),padx=6,pady=6,command=self.new_user).grid(row=11,column=0)
Button(self.crf,text = 'Go to Login',background='lightgrey',bd = 2,font = ('',13),padx=6,pady=6,command=self.log).grid(row=11,column=1)
self.crff = Frame(self.master,padx =10,pady = 10)
Label(self.crff,text = 'Consignment No: ',font = ('',15),pady=5,padx=5).grid(sticky = W)
Entry(self.crff,bd = 3,font = ('',15)).grid(row=0,column=1)
Label(self.crff,text = 'Mobile no:',font = ('',15),pady=5,padx=5).grid(sticky = W)
Entry(self.crff,bd = 3,textvariable = self.mobile11,font = ('',15)).grid(row=1,column=1)
Button(self.crff,text = 'Track',background='lightgrey',bd = 2,font = ('',13),padx=6,pady=6,command=self.consignment).grid(row=4,column=0)
self.consi = Frame(self.master,padx =10,pady = 10)
Label(self.consi,text = ' Product ID:',font = ('',15),pady=5,padx=5).grid(sticky = W)
Label(self.consi,text =random.randint(565154,99994216) ,font = ('',13),pady=5,padx=5).grid(row=0,column=1)
L = ['Bag','Colgate','shoe','Redme 2','Jeans','Parrot','Mac','Ipad','Pen','Book','shirt']
f=random.randint(0,10)
Label(self.consi,text = 'Product name: ',font = ('',15),pady=5,padx=5).grid(sticky = W)
Label(self.consi,text =L[f] ,font = ('',13),pady=5,padx=5).grid(row=1,column=1)
Label(self.consi,text = 'Product Status: ',font = ('',15),pady=5,padx=5).grid(sticky = W)
Label(self.consi,text ='Pending' ,font = ('',13),pady=5,padx=5).grid(row=2,column=1)
Label(self.consi,font = ('',13), text = 'Thanks for Exploring!').grid(row = 4, column = 0)
Label(self.consi, text = 'Comments:',font = ('',13)).grid(row = 5, column = 0, padx = 5, sticky = 'sw')
Entry(self.consi,bd = 3,font = ('',15)).grid(row=5,column=1)
Button(self.consi,text = 'Back',background='lightgrey',bd = 2,font = ('',13),padx=6,pady=6,command=self.track1).grid(row=6,column=0)
if __name__ == '__main__':
root = Tk()
root.title('Track Consignment')
root.geometry('800x750 300 300')
main(root)
canvas = Canvas(root)
canvas.pack()
canvas.config(width = 640, height = 380)
line = canvas.create_line(160, 360, 480, 120, fill = 'blue', width = 5)
canvas.itemconfigure(line, fill = '#1abc9c')
print(canvas.coords(line))
canvas.coords(line, 0, 0, 320, 240, 640, 0)
canvas.itemconfigure(line, smooth = True)
canvas.itemconfigure(line, splinesteps = 5)
canvas.itemconfigure(line, splinesteps = 100)
canvas.delete(line)
rect = canvas.create_rectangle(160, 120, 480, 360)
canvas.itemconfigure(rect, fill = '#3498db')
oval = canvas.create_oval(160, 120, 480, 360)
arc = canvas.create_arc(160, 1, 480, 240)
canvas.itemconfigure(arc, start = 0, extent = 180, fill = '#1abc9c')
poly = canvas.create_polygon(160, 360, 320, 480, 480, 360, fill = '#95a5a6')
text = canvas.create_text(320, 240, text = 'Python', font = ('Courier', 32, 'bold'))
logo = PhotoImage(file = 'logo1.gif')
image = canvas.create_image(320, 240, image = logo)
canvas.lift(text)
canvas.lower(image)
canvas.lower(image, text)
canvas.create_window(320, 60, window = button)
canvas.itemconfigure(rect, tags = ('shape'))
canvas.itemconfigure(oval, tags = ('shape', 'round'))
canvas.itemconfigure('shape', fill = 'grey')
print(canvas.gettags(oval))
root.mainloop()
Комментарии:
1. Я нигде не вижу
button
определенного.2. Как вы думаете
button
, что это? В строкеcanvas.create_window(320, 60, window = button)
. Вы, вероятно, забыли определить кнопку
Ответ №1:
В строке 240 «кнопка» не является определенным именем переменной. Возможно, вы хотели сначала создать новую кнопку с именем «button» для добавления?
Или, возможно, вы хотели использовать одну из ваших существующих кнопок, которые вы уже создали, например, R1 или R2.
«кнопка» может иметь для нас смысл, поскольку, когда мы видим «button», мы думаем о кнопке, но для python «button» не определяется как что-либо, и поэтому он не знает, что это такое, что это значит или что с этим делать.
Комментарии:
1. если я все еще вызываю R1 и R2, он снова покажет undefined, я думаю
2. Если ваша цель состоит в том, чтобы передать туда определенную кнопку, которая не создана, тогда я бы создал новую кнопку по мере необходимости, а затем передал эту вновь созданную кнопку.
Ответ №2:
R1 и R2 локализованы для функции виджетов. К ним нельзя получить доступ где-либо еще, если вы не объявите их в глобальной области видимости И не добавите к ним префикс «global» в функции, из которой вы хотите получить к ним доступ. Кроме того, я думаю, вы хотите назначить так:
Возможно, вы хотели вместо этого использовать poly? Кажется, пока она не используется:
canvas.create_window(320, 60, window = poly)