python启动线程等待输入_从Tkinter运行线程并等待它完成

我有一个tkinter应用程序(作为主线程运行),在它里面我打开了一个新的顶层窗口——它是一个日志窗口,打印测试结果(测试是用selenium webdriver执行的)。此对话框也是所有测试的调用者。在

所以我想显示对话框(作为顶层,还有一个窗口用于整个应用程序),运行一个测试,直到测试完成并打印结果,然后对另一个测试单元执行相同的操作。但我不想让窗户在测试期间冻结。在

我尝试过使用线程,但显然它可以像那样工作。在这种情况下,直到测试完成,对话框才会启动。在

这是对话框窗口的代码。在class TestDialog(tkinter.Toplevel):

def __init__(self, parent, tester, url):

super().__init__(parent)

self.parent = parent

self.webtester = tester;

self.__initComponents()

self.run(url)

self.wait_window(self)

def __initComponents(self):

self.transient(self.parent)

frame = tkinter.Frame(self)

self._tarea = tkinter.Text(frame, state='disabled',wrap='none', width=55, height=25)

vsb = tkinter.Scrollbar(frame, orient=tkinter.VERTICAL, command=self._tarea.yview)

self._tarea.configure(yscrollcommand=vsb.set)

self._tarea.grid(row=1, column=0, columnspan=4, sticky="NSEW", padx=3, pady=3)

vsb.grid(row=1, column=4, sticky='NS',pady=3)

frame.grid(row=0, column=0, sticky=tkinter.NSEW)

frame.columnconfigure(0, weight=2)

frame.rowconfigure(1, weight=1)

window = self.winfo_toplevel()

window.columnconfigure(0, weight=1)

window.rowconfigure(0, weight=1)

self.bind("", self.close)

self.protocol("WM_DELETE_WINDOW", self.close)

self.grab_set()

def appendLine(self, msg):

self._tarea['state'] = 'normal'

self._tarea.insert("end", msg+'\n')

self._tarea['state'] = 'disabled'

def run(self, url):

self.appendLine("Runneing test #1...")

try:

thr = threading.Thread(target=self.webtester.urlopen, args=(url,))

thr.start()

except:

pass

thr.join()

self.webtester.urlopen(url)

self.appendLine("Running test #2")

try:

thr = threading.Thread(target=self.webtester.test2)

thr.start()

except:

pass

def close(self, event=None):

self.parent.setBackgroundScheme(DataTreeView.S_DEFAULT)

self.parent.focus_set()

self.destroy()

此对话框只需通过以下操作从父窗口打开:

^{pr2}$

谢谢你的建议。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值