我从大学开始就没有编写过代码,而且我是Python的新手,所以我是作为一个相对新手来做这件事的。我的最终目标是有一个gui程序,它将根据人们进入twitch chat的命令做出反应。我有一个用tkinter创建的简单gui和一个监控twitch聊天的机器人。当我分别在它们自己的.py文件中运行这两个组件时,它们工作得很好。当它们在同一个程序中一起运行时,它会锁定,因为我有两个无限循环在运行。我试着穿线,但也没用。我尝试使用多进程,而不是线程,我已经包括了下面的代码。我已经看过其他的多进程和线程问题,但我似乎不明白这一点。在
from tkinter import *
# settings contains values for HOST, PORT, NICK, PASS, CHANNEL
from settings import *
import socket
import multiprocessing
class Gui:
def __init__(self, master):
self.master=master
master.title("AftA_Bot beta")
self.doodle = Canvas(master, width=720, height=576, bg="white")
self.doodle.pack()
self.out = Button(master, text="Quit", command=master.quit)
self.out.pack()
class createbot:
def __init__(self, server, port, username, token, channel):
self.s = socket.socket()
self.s.connect((server, port))
self.channel = channel
self.s.send(bytes("PASS " + token + "\r\n", "UTF-8"))
self.s.send(bytes("NICK " + username + "\r\n", "UTF-8"))
self.s.send(bytes("JOIN #" + channel + " \r\n", "UTF-8"))
print("Connected to host")
# Clear initial connection text
while True:
line = str(self.s.recv(1024))
if "End of /NAMES list" in line:
break
print("Initial login text cleared.")
def read_chat(self):
# Infinite Loop to monitor chat
while True:
for line in str(self.s.recv(1024)).split('\\r\\n'):
parts = line.split(':')
if len(parts) < 3:
continue
message = parts[2][:len(parts[2])]
usernamesplit = parts[1].split("!")
username = usernamesplit[0]
print(username + ": " + message)
def send_message(self, msg):
self.s.send(bytes("PRIVMSG #" + self.channel + " :" + msg + "\r\n", "UTF-8"))
bot = createbot(HOST, PORT, NICK, PASS, CHANNEL)
botthread = multiprocessing.Process(target=bot.read_chat)
root = Tk()
mainapp = Gui(root)
guithread = multiprocessing.Process(target=root.mainloop)
try:
botthread.start()
except:
print("Could not start bot thread")
try:
guithread.start()
except:
print("Could not start gui thread")
以上代码导致以下输出/错误:
^{pr2}$
目前没有回答
相关问题 更多 >
编程相关推荐