Python 消息发送程序中的错误
我只是在试验一个只在一台计算机上运行的消息传递程序。好的,问题是:如果我以用户身份登录并向另一个用户发送消息,即使我登录到消息接收用户,也不会有消息,这表示没有消息。请帮帮我。您也可以给出自己的建议和简化代码的方法Python 消息发送程序中的错误,python,python-2.7,user-interface,tkinter,Python,Python 2.7,User Interface,Tkinter,我只是在试验一个只在一台计算机上运行的消息传递程序。好的,问题是:如果我以用户身份登录并向另一个用户发送消息,即使我登录到消息接收用户,也不会有消息,这表示没有消息。请帮帮我。您也可以给出自己的建议和简化代码的方法 import Tkinter as tk import sys import tkMessageBox import csv accounts = dict() messages = [] messagerec = [] messagesen = [] csvpath = "C
import Tkinter as tk
import sys
import tkMessageBox
import csv
accounts = dict()
messages = []
messagerec = []
messagesen = []
csvpath = "C:/Users/user1/Desktop/abc.csv"
csvreader = csv.reader(open(csvpath))
for y, z in csvreader:
accounts[y] = z
def GetUser():
user = userid.get()
return user
def GetPass():
password = passid.get()
return password
def SignUp():
def signupgo():
newuser = newuserid.get()
newpass = newpassid.get()
if newuser in accounts:
tkMessageBox.showerror("Username Taken", 'Sorry! The username you have requested has already been taken. Please try another username.' [2])
else:
accounts[newuser] = newpass
tkMessageBox.showinfo("Account Created", 'Congratulations! Your account has been created' [2])
newuserid = tk.StringVar()
newpassid = tk.StringVar()
SignUpWin = tk.Tk()
NewUserLabel = tk.Label(SignUpWin, text="New Username: ").pack()
NewUserInput = tk.Entry(SignUpWin,textvariable=newuserid).pack()
NewPassLabel = tk.Label(SignUpWin, text="New Password: ").pack()
NewPassInput = tk.Entry(SignUpWin, textvariable=newpassid).pack()
CreateAccount = tk.Button(SignUpWin, text="Create Account", command=signupgo).pack()
def logingo():
user = GetUser()
password = GetPass()
if user in accounts:
if accounts[user] == password:
LoggedIn(user)
elif accounts[user] != password:
tkMessageBox.showerror("Wrong Password", 'Try Again! You have entered the wrong password.')
elif user not in accounts:
tkMessageBox.showerror("User not existing", 'Try Again or Create an account! The username you have provided is not existing.')
def LoggedIn(user):
def MessageButtonClick():
if tkMessageBox.askquestion('Compose or Inbox?', 'Do you want to access your inbox(Yes) or compose a new message(No)?') == 'yes':
OpenInbox(user)
else:
MessageSender(user)
消息发送部分从这里开始
def MessageSender(user):
messagerecvar = tk.StringVar()
messagecontentvar = tk.StringVar()
messagesenderwin = tk.Tk()
messagereclabel = tk.Label(messagesenderwin, text="Receiver:").pack()
messagerecinput = tk.Entry(messagesenderwin, textvariable=messagerecvar).pack()
messagecontentlabel = tk.Label(messagesenderwin, text="Content:").pack()
messagecontentinput = tk.Entry(messagesenderwin, textvariable=messagecontentvar).pack()
messagecontent = messagecontentvar.get()
messagerec = messagerecvar.get()
messagesendgobutton = tk.Button(messagesenderwin, text='Send Message', command=lambda:sendmessagego(messagecontent, user, messagerec)).pack()
def sendmessagego(content, sender, receiver):
messages.append(content)
messageno = len(messages)
messagerec.append(receiver)
messagesen.append(sender)
tkMessageBox.showinfo("Message Sent", 'Your message has been sent.')
def OpenInbox(user):
if 'a' in messagerec:
lenmess = messagerec.index(user)
tkMessageBox.showinfo('Message from '+messagesen[lenmess], 'Message from '+messagesen[lenmess]+': '+messages[lenmess])
elif user not in messagerec:
tkMessageBox.showinfo('No Messages', 'Sorry, no messages were found')
loggedinwin = tk.Tk()
tkMessageBox.showinfo("Welcome", 'Hello, '+user)
HomeLabel = tk.Label(loggedinwin, text="Home").pack()
MessageMenuButton = tk.Button(loggedinwin, text="Messaging", command=MessageButtonClick).pack()
maingui = tk.Tk()
userid = tk.StringVar()
passid = tk.StringVar()
UserEnterLabel = tk.Label(maingui, text="Username: ").pack()
UserInput = tk.Entry(maingui, textvariable=userid).pack()
PassEnterLabel = tk.Label(maingui, text="Password: ").pack()
PassInput = tk.Entry(maingui, textvariable=passid).pack()
LoginGo = tk.Button(maingui, text="Login", command=logingo).pack()
SignUpGo = tk.Button(maingui, text="Sign Up", command=SignUp).pack()
maingui.mainloop()
第一个问题是您正在创建多个Tk实例。Tkinter不是设计成这样的,它会产生意想不到的结果。如果您需要多个窗口,您需要创建Toplevel的实例,如果您向我们展示一个获取错误的窗口,包括输入、预期和实际输出,以及任何警告或错误消息(包括编译器警告),用户将更愿意并能够提供帮助。采取行动,阅读,把自己放在读者的位置上。你提供了足够的信息吗?你问的清楚吗?对不起,下次我会照你说的做。当它不起作用时,我非常生气,以至于我忘了做所有这些。我做了,但仍然存在同样的问题。你能帮我解决这个问题吗?