如何解决GUI和脚本集成
我想用pyinstaller创建一个可执行文件,为此,我有一个带有GUI的脚本,应该在执行时启动。它获取用户输入并执行bot脚本。我已经分别运行了bot脚本和GUI脚本,它们可以按我希望的方式运行,但是,当试图将两者集成在一起以便将GUI的输入发送到bot时,我遇到了问题。我在运行脚本时立即调用了bot函数,甚至没有显示用户界面。
from instabot import Bot
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
from datetime import datetime
import re
import os
from PIL import Image,ImageTk
import shutil
import tkinter as tk
# GUI
window = tk.Tk()
window.title("Confessions Bot")
window.geometry("600x300")
window.grid_columnconfigure((0,2),weight = 1)
label_tell_account = tk.Label(window,text = "Tellonym Account")
label_tell_password = tk.Label(window,text = "Tellonym Password")
label_ig_account = tk.Label(window,text = "Instagram Account")
label_ig_password = tk.Label(window,text = "Instagram Password")
tell_account = tk.Entry(window)
tell_password = tk.Entry(window)
ig_account = tk.Entry(window)
ig_password = tk.Entry(window)
run = tk.Button(text = "Run!",command = bot(tell_account.get(),tell_password.get(),ig_account.get(),ig_password.get()))
image = ImageTk.PhotoImage(Image.open("logo.png"))
tk.Label(window,image = image).grid(row = 0,column = 1,padx = 10,pady = 10)
label_tell_account.grid(row = 1,column = 0)
tell_account.grid(row = 1,column = 2,pady = 10)
label_tell_password.grid(row = 2,column = 0,pady = 10)
tell_password.grid(row = 2,pady = 10)
label_ig_account.grid(row = 3,pady = 10)
ig_account.grid(row = 3,pady = 10)
label_ig_password.grid(row = 4,pady = 10)
ig_password.grid(row = 4,pady = 10)
run.grid(row = 5,pady = 10)
window.mainloop()
def bot(tell_account_input,tell_password_input,ig_account_input,ig_password_input):
# Getting Tells to Post
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://tellonym.me/login?redirect=/tells")
username = WebDriverWait(driver,10).until(
EC.presence_of_element_located((By.NAME,"email")))
username.clear()
username.send_keys(tell_account_input)
password = WebDriverWait(driver,"password")))
password.clear()
password.send_keys(tell_password_input)
driver.find_element_by_tag_name("button").click()
for element in WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CLASS_NAME,"rmq-f5f56a03"))):
unclean_name = re.findall("element\s*=\s*([\S\s]+)",str(element))
name = re.sub('[^\w]','',str(unclean_name))
element.screenshot("to_post/" + datetime.now().strftime("%Y_%m_%d-%I_%M_%S_%p") + str(name) + ".png")
for i in range(len(driver.find_elements_by_class_name("rmq-f5f56a03"))):
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CLASS_NAME,"rmq-f5f56a03"))).click()
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.NAME,"answer"))).send_keys("posted")
driver.find_element_by_tag_name("button").click()
driver.quit()
# Pic Formating
for pics in os.listdir("to_post/"):
image = Image.open("to_post/" + pics,'r')
image = image.convert('RGB')
image = image.crop(((1,1,600,50)))
template = Image.open("template.jpg")
template.paste(image,(85,380))
template.save(re.sub(".png",".jpg",str("to_post/" + pics)))
for item in os.listdir("to_post/"):
if item.endswith(".png"):
os.remove(os.path.join("to_post/",item))
# Posting Tells to Instagram
bot = Bot()
bot.login(username = ig_account_input,password = ig_password_input)
for pics in os.listdir("to_post/"):
bot.upload_photo("to_post/" + str(pics),caption = "test")
# Movig pics from to_post folder -> posted
for pics in os.listdir("to_post/"):
shutil.move("to_post/" + pics,"posted")
os.rename("posted/" + pics,"posted/" + re.sub(".REMOVE_ME","",str(pics)))
解决方法
在这里,您正在调用bot函数,同时将其传递给参数command
。
run = tk.Button(text = "Run!",command = bot(tell_account.get(),tell_password.get(),ig_account.get(),ig_password.get()))
这是行调用bot函数。您应该使用lambda表达式 当您需要使用参数调用函数时。
尝试一下:
run = tk.Button(text = "Run!",command = lambda : bot(tell_account.get(),ig_password.get()))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。