V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
neroransom
V2EX  ›  Python

请教下大家,为什么 Python 的申请新进程 Process start() 后没能打开 tkinter 的新窗口?

  •  
  •   neroransom · 2020-03-01 00:40:11 +08:00 · 2018 次点击
    这是一个创建于 1731 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用 tkinter 写了个聊天小软件,想试试多进程。但是调用 p.start() 函数后,虽然调用成功了,(有输出结果),但是 target 的函数中,申请 GUI 窗口的函数 Tk() 似乎没有正常工作。如果我把 start(),改成 run(),他还是能够正常工作,似乎还是进程问题,有朋友能指点一下吗。

    def startchat(self,account):
         p = Process(target = chat.main,args=(account,self.udpCliSock,self.ADDR))
         p. start()
    
    def main(account, udpCliSock, ADDR):
     Chat(account, udpCliSock, ADDR)
    
    class Chat:
        def __init__(self,account,udpCliSock,ADDR):
            self.ADDR = ADDR
            self.udpCliSock=udpCliSock
            root = Tk()
    
    neroransom
        1
    neroransom  
    OP
       2020-03-01 11:30:10 +08:00
    解决了,似乎是开了新进程后,原先写在主程序的 mainloop 不管用了,因此要在构建这个申请新窗口里再加一个 mainloop

    class Chat
    def __init__(self,account,udpCliSock,ADDR):
    self.ADDR = ADDR
    self.udpCliSock=udpCliSock
    root = Tk()
    root.mainloop
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5361 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 08:23 · PVG 16:23 · LAX 00:23 · JFK 03:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.