Python Tkinter按钮问题(Twitch bot)

时间:2015-06-17 19:20:16

标签: python tkinter

我正在尝试为我的抽搐聊天机器人制作测试Tkinter按钮。单击此按钮将执行的操作是将简单消息发送到它所连接的通道。但是,在尝试弄清楚如何执行此操作时,我遇到了一些问题。我已经创建了基本按钮,但是在单击它时出现此控制台错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__
    return self.func(*args)
  File "C:\Users\Cosmicluck\Desktop\bot.py", line 122, in commandTest
    send_message(CHAN, "Click!")
  File "C:\Users\Cosmicluck\Desktop\bot.py", line 30, in send_message
    con.send(bytes('PRIVMSG %s :%s\r\n' % (chan, msg), 'UTF-8'))
NameError: name 'con' is not defined

现在它说没有定义“con”,但是我不需要定义它,因为我设置的命令工作得非常好。以下是NameError引用的代码:

def send_pong(msg):
    con.send(bytes('PONG %s\r\n' % msg, 'UTF-8'))

def send_message(chan, msg):
    con.send(bytes('PRIVMSG %s :%s\r\n' % (chan, msg), 'UTF-8'))

def send_nick(nick):
    con.send(bytes('NICK %s\r\n' % nick, 'UTF-8'))

def send_pass(password):
    con.send(bytes('PASS %s\r\n' % password, 'UTF-8'))

def join_channel(chan):
    con.send(bytes('JOIN %s\r\n' % chan, 'UTF-8'))

def part_channel(chan):
    con.send(bytes('PART %s\r\n' % chan, 'UTF-8'))

最后这是我的Tkinter按钮代码:

master = Tk()

def commandTest():
    send_message(CHAN, "Click!")

b = Button(master, text="OK", command=commandTest)
b.pack()

mainloop()

我希望有人可以解释如何解决这个问题,如果有可能的话。谢谢!

2 个答案:

答案 0 :(得分:1)

在您的代码中,您似乎在尝试在连接到套接字之前调用mainloop()。如果名称暗示它实际上是“主循环”,则需要在调用后调用mainloop();

con = socket.socket()
con.connect((HOST, PORT))

send_pass(PASS)
send_nick(NICK)
join_channel(CHAN)

- 因此,改变

mainloop()

con = socket.socket()
con.connect((HOST, PORT))

send_pass(PASS)
send_nick(NICK)
join_channel(CHAN)

data = ""

con = socket.socket()
con.connect((HOST, PORT))

send_pass(PASS)
send_nick(NICK)
join_channel(CHAN)

data = ""

mainloop()

你很可能不得不做一些其他调试,但是,这个修复你的'con is not defined'问题。

答案 1 :(得分:0)

您的命令功能中引用的con是本地的,并且与第110行中定义的con不同:

con = socket.socket()

为命令函数添加参数,这样:

def send_pong(msg, conn):
    conn.send(bytes('PONG %s\r\n' % msg, 'UTF-8'))

调用这些函数时,将其作为参数传递:

send_pong(line[1],con)