python不关闭窗口_为什么python代码打开另一个窗口不关上当前窗口就用不了?

首先说,这个现象是正常的,原因是Windows的事件循环。关于更多Windows事件循环的知识点可以查阅相关资料。

Windows系统上每一个按钮都对应一个按钮事件,也就是你的testbuttoncommand这个回调函数,在点击按钮时,Windows系统就会生成一个点击事件,放到事件循环的待处理队列中,然后交由事件循环去依次去处理队列中的事件,处理的过程中系统会自动调用这个回调函数。

一般来说,事件循环上的回调函数时不允许做耗时操作的,耗时操作需要放到其他线程中去。

你在回调函数中调用了os.system这个函数,os.system会通过cmd的方式启动test2.py,此时新打开的notepad++是cmd的子进程,在cmd的子进程不退出的情况下,os.system函数是不会返回的,所以此时回调函数就会被阻塞在这里了。

在回调函数不返回的情况下,你会发现界面也会卡住,因为在处理按钮事件时事件循环被阻塞了,导致事件循环无法正常处理其他事件了,所以界面也不会响应我们对他所做的任何操作,包括但不限于拖动,点击退出按钮,最大化等等。

所以说如果需要耗时操作的话,可以在回调函数中新开线程,来处理耗时操作。

附上新开线程的参考方法,我尽量以最小改动的方式来修改,但是这样实现不是特别优雅。

还是需要根据你的需要进行具体的修改。

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

import threading

import tkinter

import os

test1 = tkinter.Tk()

def testbuttoncommand():

threading.Thread(target=lambda: os.system("test2.py"), args=()).start()

testbutton = tkinter.Button(text="testbutton", command=testbuttoncommand)

testbutton.place(x=1, y=1)

test1.mainloop()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值