• python tkinter txt窗口,开线程两个卡死


    一个线程可以,两个卡死

    #!/usr/bin/python
    # coding: utf-8
    
    from Tkinter import *
    import threading
    
    class MyThread2(threading.Thread):
    
        def __init__(self, func):
            threading.Thread.__init__(self)
            self.func = func
    
        def run(self):
            self.func()
    
    def windows1():
          root = Tk()
          root.title("记事本")
          # root.geometry("800x600+100+100")
    
          s1 = Scrollbar(root)
          s1.pack(side=RIGHT, fill=Y)
          # HORIZONTAL 设置水平方向的滚动条,默认是竖直
          s2 = Scrollbar(root, orient=HORIZONTAL)
          s2.pack(side=BOTTOM, fill=X)
          # 创建文本框
          # wrap 设置不自动换行
          textpad = Text(root, yscrollcommand=s1.set, xscrollcommand=s2.set, wrap='none')
          textpad.pack(expand=YES, fill=BOTH)
          s1.config(command=textpad.yview)
          s2.config(command=textpad.xview)
          root.mainloop()
    
    
    def windows2():
          root = Tk()
          root.title("记事本")
          # root.geometry("800x600+100+100")
          s1 = Scrollbar(root)
          s1.pack(side=RIGHT, fill=Y)
          # HORIZONTAL 设置水平方向的滚动条,默认是竖直
          s2 = Scrollbar(root, orient=HORIZONTAL)
          s2.pack(side=BOTTOM, fill=X)
          # 创建文本框
          # wrap 设置不自动换行
          textpad = Text(root, yscrollcommand=s1.set, xscrollcommand=s2.set, wrap='none')
          textpad.pack(expand=YES, fill=BOTH)
          s1.config(command=textpad.yview)
          s2.config(command=textpad.xview)
          root.mainloop()
    
    if __name__ == '__main__':
          threads = []
          t1 = MyThread2(windows1)
          threads.append(t1)
          t2 = MyThread2(windows2)
          threads.append(t2)
          for t in threads:
              t.setDaemon(True)
              t.start()
          for t in threads:
              t.join()
    

    运行一直等待中,不会出窗口

    网上搜的结果,待验证。

    tkinter和多线程确实有冲突,我也是弄了很久,最后才发现是这两者的问题。
    后来我又自学了c#,发现其图形界面的控件是不允许多线程直接访问的,所以我推测python是因为图形下的控件被多线程同时访问(赋值),所以造成崩溃。
    解决办法,我目前知道的(我是新手),要么不用多线程,要么不用tkinter。

  • 相关阅读:
    java基础 Collections.sort的两种用法
    Mysql常用命令详解
    2、Java并发编程:如何创建线程
    JAR、WAR、EAR的使用和区别
    区分Oracle的数据库,实例,服务名,SID
    Mysql 启动运行
    3、Java并发编程:Thread类的使用
    1、Java多线程基础:进程和线程之由来
    文件上传利器SWFUpload使用指南
    网络矩阵
  • 原文地址:https://www.cnblogs.com/anita-harbour/p/9336924.html
Copyright © 2020-2023  润新知