Продолжение кода после выполнения файла - Python
Я сделал простой графический интерфейс, который запускается при запуске моего Twitch TV IRC Bot. Но основной бот продолжается только после того, как я закрою графический интерфейс. Как бы я сделал так, чтобы скрипт работал одновременно с графическим интерфейсом? Это графический интерфейс:
##--GUI--##
def whitelist_wipe():
execfile('command_whitelist_wipe.py')
def modpack():
modpack = modpack_input.get()
return
root = Tk()
modpack_input = StringVar()
root.title('Geekster_Bot')
root.geometry('450x450+500+300')
WhitelistButton = Button(root, text = 'Clear Whitelist!', command + whitelist_wipe).pack()
SubmitButton = Button(root, text = 'Change Modpack', command = modpack).pack()
ModpackName = Entry(root, textvariable=modpack_input).pack()
root.mainloop()
Это та часть, где он запускает графический интерфейс от основного бота Scrpit:
try:
execfile('GUI.py')
except:
print('Error loading GUI')
Как бы я продолжил код с открытым графическим интерфейсом?
РЕДАКТИРОВАТЬ
GUI.py;
##--GUI--##
def whitelist_wipe():
execfile('command_whitelist_wipe.py')
def modpack_var():
modpack_input = modpack_user.get()
root = Tk()
modpack_user = StringVar()
root.title('Geekster_Bot')
root.geometry('350x100+500+300')
Label1 = Label(root, text = 'Geekster_Bot Controls!').pack()
WhitelistButton = Button(root, text = 'Clear Whitelist!', command =whitelist_wipe).pack(side = LEFT)
SubmitButton = Button(root, text = 'Change Modpack', command = modpack_var).pack()
ModpackName = Entry(root, textvariable=modpack_user).pack()
root.mainloop()
Главный бот;
try:
#Create thread
gui_thread = threading.Thread( target = execfile, args = ('GUI.py',) )
#Start thread
gui_thread.start()
#Code to run in the main thread
except:
print('Error loading GUI')
def message(msg): #function for sending messages to the IRC chat
global queue
queue = queue + 1
print queue
if queue < 20: #ensures does not send >20 msgs per 30 seconds.
twitch = ('OUTPUT ON ' + channel + ' :' + msg + '\r\n')
irc.send('PRIVMSG ' + channel + ' :' + msg + '\r\n')
print (twitch)
else:
print 'Message deleted'
def socialtimer(): #function for announcing social every 3 minutes
global ntimer
z = open(r'E:\Geekster_Bot\Twitter.txt')
SOCIAL = z.read()
message (SOCIAL)
print 'Social Timers Started!'
ntimer = threading.Timer(1200,socialtimer)
ntimer.start()
def queuetimer(): #function for resetting the queue every 30 seconds
global queue
print 'queue reset'
queue = 0
threading.Timer(30,queuetimer).start()
def modpack_var():
modpack_input = modpack_user.get()
##--Main Bot--##
#General variables
newsmsg = 'whitelist'
modpack = modpack_input
1 ответ
Поскольку сам графический интерфейс работает в цикле, он блокирует поток, в котором вы его запускаете, до тех пор, пока вы не остановите цикл (закройте графический интерфейс). Вы должны запустить графический интерфейс в другом потоке, отличном от основного.
Вы можете сделать это с помощью модуля потоков:
import threading
try:
#Create thread
gui_thread = threading.Thread( target = execfile, args = ('GUI.py',) )
#Start thread
gui_thread.start()
#Code to run in the main thread
except:
print('Error loading GUI')
В этом коде gui_thread
Объект является потоком, который запускает execfile
вызываемый (функция в данном случае) с параметром 'GUI.py'
на старте. Обратитесь к документации модуля потоков для получения дополнительной информации: https://docs.python.org/3.3/library/threading.html