import sys
import time
import tkinter as tk
from tkinter.messagebox import askyesno
from tkinter.scrolledtext import ScrolledText
import threading
from selenium import webdriver
from selenium.webdriver.common.by import By
class TestGui(object):
def __init__(self, init_window_name):
self.init_window_name = init_window_name
self.init_window_name.title("将button方法打包进线程,现实运行不卡顿测试")
self.init_window_name.geometry('700x350')
""" 点击右上角关闭窗体弹窗事件 """
self.init_window_name.protocol('WM_DELETE_WINDOW', lambda: self.thread_it(self.clos_window))
""" 组件容器创建 """
self.log_frame = tk.Frame(self.init_window_name)
self.log_frame.grid(padx=20, pady=0, row=1, column=0, sticky=tk.W)
self.runs_button_frame = tk.Frame(self.init_window_name)
self.runs_button_frame.grid(padx=20, pady=0, row=2, column=0, sticky=tk.W)
""" 日志框 """
self.run_log = ScrolledText(self.log_frame, font=('楷体', 13), width=69, height=17)
self.run_log.grid(padx=20, pady=5, row=0, column=0)
""" 操作按钮 """
self.start_run1 = tk.Button(self.runs_button_frame, text='开始打印1', font=('行楷', 15, 'bold'), fg="white", bg="#1E90FF", width=25, command=lambda: self.thread_it(self.print1))
self.start_run1.grid(padx=20, pady=0, row=0, column=1)
self.start_run2 = tk.Button(self.runs_button_frame, text='开始打印2', font=('行楷', 15, 'bold'), fg="white", bg="#1E90FF", width=25, command=lambda: self.thread_it(self.print2))
self.start_run2.grid(padx=35, pady=0, row=0, column=2)
self.strxx = 'uuuuu'
def thread_it(self, func, *args):
""" 将函数打包进线程 """
self.myThread = threading.Thread(target=func, args=args)
self.myThread .setDaemon(True)
self.myThread .start()
def print1(self):
chrome_options = webdriver.ChromeOptions()
chrome_options.binary_location = r"C:\Users\Administrator\AppData\Roaming\360se6\Application\360se.exe"
chrome_options.add_argument(r'--lang=zh-CN')
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("https://www.baidu.com")
while True:
time.sleep(1.5)
self.run_log_print(message=test_gui.strxx)
def print2(self):
test_gui.strxx = 'ddd'
self.run_log_print(message=test_gui.strxx)
self.run_log_print(message='我是小洲2 - 打印完成')
def run_log_print(self, message):
self.run_log.config(state=tk.NORMAL)
self.run_log.insert(tk.END, "\n" + message + "\n")
self.run_log.see(tk.END)
self.run_log.update()
self.run_log.config(state=tk.DISABLED)
def clos_window(self):
ans = askyesno(title='小洲助手v1.1警告', message='是否确定退出程序?\n是则退出,否则继续!')
if ans:
self.init_window_name.destroy()
sys.exit()
else:
return None
strMy='cccc'
if __name__ == '__main__':
""" 把button方法打包进线程,现实运行不卡顿 """
""" 实例化出一个父窗口 """
init_window = tk.Tk()
""" tk界面置顶 """
init_window.attributes("-topmost", 1)
""" 创建Gui类对象 """
test_gui = TestGui(init_window)
""" 初始化GUi组件 """
init_window.mainloop()