Python Tkinter:使用Entry重置之前定义的变量

0 投票
1 回答
718 浏览
提问于 2025-04-18 15:32

我想让用户输入他们的名字、密码等信息时,这些信息能够被全局存储,这样程序就可以用这个名字进行连接。我在最上面定义了这些变量,像这样:

global server
server = ""
global nick
nick = ""
global altnick
altnick = ""
global password
password = ""
global channel
channel = ""

然后,当Tkinter程序运行时,用户可以通过输入框输入所有正确的值:

networktop = Toplevel(master=root)
networktop.title("Network List")
networktop.geometry("300x220")

Label(networktop, text="Nickname:").pack()
nickbox = Entry(networktop)
nickbox.grid(column="50", row="50")
nickbox.pack()

nick = nickbox.get()

Label(networktop, text="Alternate nick:").pack()
altbox = Entry(networktop)
altbox.grid(column="50", row="50")
altbox.pack()

altnick = altbox.get()

Label(networktop, text="Password:").pack()
pwbox = Entry(networktop, show="*")
pwbox.grid(column="50", row="50")
pwbox.pack()

password = pwbox.get()

Label(networktop, text="Channel to join:").pack()
chanbox = Entry(networktop)
chanbox.grid(column="50", row="50")
chanbox.pack()

channel = chanbox.get()

listvar = StringVar(networktop)
listvar.set("Choose a network...") # default value
listnetwork = OptionMenu(networktop, listvar, "irc.freenode.net")
listnetwork.config(width="50")
listnetwork.grid(column="50", row="50")
listnetwork.pack()

server = listvar.get()

networkconnect = Button(networktop, text="Connect", command=connect)
networkcancel = Button(networktop, text="Cancel", command=networktop.destroy)
networkcancel.pack(side=LEFT)
networkconnect.pack(side=RIGHT)

我想实现的目标是,当用户输入某个值(比如“NickName”)时,它能够把最上面的nick = ""替换成nick = "NickName",这样当用户点击“连接”时,就可以用“NickName”连接到服务器。但是我遇到了以下错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1470, in __call__
    return self.func(*args)
  File "C:\Users\dell\Desktop\irchat.py", line 29, in connect
    irc.connect((server, 6667))
  File "C:\Python27\lib\socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
error: [Errno 10049] The requested address is not valid in its context

我觉得我真是个菜鸟,解决方案可能简单得像吃 pie 一样。xD

1 个回答

0

看起来你是在用户还没来得及输入任何文字的时候,就获取了输入框的值。你先创建了这个输入框,然后立刻去获取它的值。因为这样做,获取到的值是空的,所以后面的代码就出错了。

你应该等用户点击“连接”按钮之后,再去获取输入框里的值。

撰写回答