【发布时间】:2017-02-19 16:17:31
【问题描述】:
我使用的是 python 2.7,但在尝试执行我的代码时遇到了一个奇怪的错误。
Traceback (most recent call last):
File "E:/cyber/PYTHON/client/main.py", line 16, in <module>
main()
File "E:/cyber/PYTHON/client/main.py", line 9, in main
menubutton_auth = auth_page.set_menu_button(root)
File "E:\cyber\PYTHON\client\auth_page.py", line 15, in set_menu_button
menubutton.menu.add_command(label=LOG_IN, command=self.log_in_page)
File "C:\Heights\PortableApps\PortablePython2.7.6.1\App\lib\lib-tk\Tkinter.py", line 2683, in add_command
self.add('command', cnf or kw)
File "C:\Heights\PortableApps\PortablePython2.7.6.1\App\lib\lib-tk\Tkinter.py", line 2674, in add
self._options(cnf, kw))
_tkinter.TclError: invalid command name ".36805008.36805608"
错误引用了命令:
menubutton.menu.add_command(label=LOG_IN, command=self.log_in_page)
当我尝试使用 python 3 执行它时,它运行良好,但使用 python 2.7 会引发此错误。这条线我做错了什么?
谢谢。
代码:
from pages_menu import *
from Tkinter import *
import tkMessageBox
class AuthPage(Page):
def __init__(self, root):
Page.__init__(self, root)
self.root = root
self.socket = None
def set_menu_button(self, root):
menubutton = super(AuthPage, self).set_menu_button(root)
self.log_in_page()
menubutton.menu.add_command(label=LOG_IN, command=self.log_in_page)
menubutton.menu.add_command(label=REGISTER, command=self.register_page)
return menubutton
def log_in_page(self):
self.clear_screen(self.root)
self.add_elements(self.root, LOG_IN)
text = Label(self.root, bd=0, font=self.font1, text=LOG_IN_TEXT, pady=100)
text.pack()
self.display_structure()
l = Label(self.root, pady=20)
l.pack()
button = Button(self.root, bg=ROYAL_BLUE, activebackground=ROYAL_BLUE,
font=self.font1, fg=WHITE, text=LOG_IN,
command=self.log_in_user)
button.pack()
def register_page(self):
self.clear_screen(self.root)
self.add_elements(self.root, REGISTER)
text = Label(self.root, bd=0, font=self.font1, text=REGISTER_TEXT, pady=40)
text.pack()
self.display_structure()
global entry_email
label_email = Label(self.root, fg=CHOCOLATE, bd=0, font=self.font1, text=EMAIL, pady=20)
label_email.pack()
entry_email = Entry(self.root, bg=GREEN, bd=5, font=self.font1, exportselection=0, fg=RED)
entry_email.pack()
l = Label(self.root, pady=20)
l.pack()
button = Button(self.root, bg=ROYAL_BLUE, activebackground=ROYAL_BLUE,
font=self.font1, fg=WHITE, text=LOG_IN,
command=self.register_user)
button.pack()
def display_structure(self):
global entry_username
global entry_password
label_username = Label(self.root, fg=CHOCOLATE, bd=0, font=self.font1, text=USERNAME, pady=20)
label_username.pack()
entry_username = Entry(self.root, bg=GREEN, bd=5, font=self.font1, exportselection=0, fg=RED)
entry_username.pack()
label_password = Label(self.root, fg=CHOCOLATE, bd=0, font=self.font1, text=PASSWORD, pady=20)
label_password.pack()
entry_password = Entry(self.root, bg=GREEN, bd=5, font=self.font1, exportselection=0, fg=RED, show="*")
entry_password.pack()
def log_in_user(self):
global entry_username
global entry_password
request = "database#login#" + entry_username.get() + "#" + entry_password.get()
self.make_socket()
self.socket.send(request)
answer = self.socket.recv(CHECK_BUFFER)
if answer == OK:
save_username(entry_username.get())
self.enter()
else:
tkMessageBox.showwarning("INVALID", "Invalid username or password")
def register_user(self):
global entry_username
global entry_password
global entry_email
request = "database#register#" + entry_username.get() + "#" + entry_password.get() + "#" + entry_email.get()
self.make_socket()
self.socket.send(request)
answer = self.socket.recv(CHECK_BUFFER)
if answer == OK:
save_username(entry_username.get())
self.enter()
else:
tkMessageBox.showwarning("INVALID", "Those username or password already exists")
def enter(self):
self.clear_all_screen(self.root)
menubutton = super(AuthPage, self).set_menu_button(self.root)
add_menu(self.root, menubutton)
home_page()
def make_socket(self):
self.socket = socket.socket()
self.socket.connect((SERVER, PORT))
【问题讨论】:
-
我认为我们需要知道
Page.set_menu_button做了什么。请删除任何不相关的代码,并创建一个Minimal, Complete, and Verifiable example
标签: python python-2.7 tkinter error-handling tcl