zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    [LeetCode] 210. Course Schedule II
    [LeetCode] 207. Course Schedule
    [LeetCode] 450. Delete Node in a BST
    [LeetCode] 1122. Relative Sort Array
    [LeetCode] 1013. Partition Array Into Three Parts With Equal Sum
    [LeetCode] 173. Binary Search Tree Iterator
    [LeetCode] 208. Implement Trie (Prefix Tree)
    [LeetCode] 211. Add and Search Word
    [LeetCode] 449. Serialize and Deserialize BST
    [LeetCode] 236. Lowest Common Ancestor of a Binary Tree
  • 原文地址:https://www.cnblogs.com/anita-harbour/p/9336924.html
Copyright © 2011-2022 走看看