首页 > 编程语言 >python Listbox插入数据导致GUI崩溃

python Listbox插入数据导致GUI崩溃

时间:2023-02-05 13:45:25浏览次数:48  
标签:name python GUI init window tk msg Listbox self

提问:

 我用windnd模块做了个文件拖入获取路径的功能,想把获取到的路径插入到列表,但是GUI会崩溃,下面是原代码 求帮忙看看咋回事

import windnd
import threading
import tkinter as tk
 
class TestGui:
    def __init__(self, init_window_name):
        self.init_window_name = init_window_name
        self.init_window_name.title("测试")
        self.init_window_name.geometry("580x340+600+350")
        self.scroll_y = tk.Scrollbar(self.init_window_name)
        self.scroll_y.grid(row=0, column=2, ipady=100)
        self.listbox1 = tk.Listbox(self.init_window_name, width=80, height=13, yscrollcommand=self.scroll_y.set)
        self.listbox1.grid(row=0, column=1,columnspan=1)
        self.scroll_y.config(command=self.listbox1.yview)
        self.listbox1.insert(tk.END, "99999")  # 能正常插入列表框
        """ 列表框及滚动条 """
        self.hook_dropfiles = windnd.hook_dropfiles
        self.hook_dropfiles(self.listbox1, func=self.dragged_files)
        """ 文件拖动 """
 
    def thread_it(self, func, *args):
 
        self.myThread = threading.Thread(target=func, args=args)
        self.myThread .setDaemon(True)
        self.myThread .start()
 
    def dragged_files(self,files):
        msg = '\n'.join((item.decode('gbk') for item in files))
        print(msg)   # 把文件拖进来后可以正常打印路径
        self.listbox1.insert(tk.END, msg)  # 但一插入列表 GUI就崩溃了
 
if __name__ == '__main__':
 
    init_window = tk.Tk()
    init_window.attributes("-topmost", 1)
    test_gui = TestGui(init_window)
    init_window.mainloop()
 

报了这个错误 :Fatal Python error: PyEval_RestoreThread: NULL tstate
Python runtime state: initialized

解答:

 代码将拖动的文件路径插入列表框时是在 GUI 线程中进行的,但 windnd 模块在后台处理文件拖动事件,可能会导致 GUI 线程阻塞。

为了解决这个问题,可以使用 threading 模块在新线程中插入列表框,避免阻塞 GUI 线程:

 
def dragged_files(self,files):
    msg = '\n'.join((item.decode('gbk') for item in files))
    print(msg)   # 把文件拖进来后可以正常打印路径
    self.thread_it(self.insert_to_listbox, msg)
 
def insert_to_listbox(self, msg):
    self.listbox1.insert(tk.END, msg)

 

标签:name,python,GUI,init,window,tk,msg,Listbox,self
From: https://www.cnblogs.com/dituirenwu/p/17093279.html

相关文章

  • GUI自动化处理
    什么是GUI自动化GUI自动化就是写程序直接控制键盘和鼠标。这些程序可以控制其他应用,向它们发送虚拟的击键和鼠标点击,就像你自己坐在计算机前与应用交互一样。这种技术被......
  • python内置函数len()
    len()len()函数用于返回对象(字符串、字节、元组、列表等)的长度(元素个数)len()函数的语法:len(s)代码示例print(len(range(10)))print(len(["1","2","3"]))print(len......
  • python内置函数range()
    range()函数介绍range()函数实际上表示一个不可变的数字序列类型,通常用于在for循环中指定特定的次数。range()的格式:classrange(stop)classrange(start,stop[,ste......
  • Python黑客编程之类nc工具
    目的用pythonsocket编写一款类似NetCat的工具,可以在服务器上远程执行命令,从服务器上下载文件代码服务端和客户端用同一套代码,用-l参数进行区分importargparsei......
  • 20天零基础自学Python | Day5 8大数据类型
    大家好,我是宁一。这节课我们来讲讲python的8大数据类型,已经这些数据类型的区别。1、什么是数据类型上节课说过,后面我们不管是做网站,还是做数据分析,都要处理各种各样的数据,比......
  • 20天零基础自学Python | Day4 变量
    大家好,我是宁一。后面我们不管是做网站,还是做数据分析,都要处理各种各样的数据,比如姓名、生日、分数等。变量,就是我们给这些数据起的名字。1、定义变量比如我们用变量定义一......
  • 20天零基础自学Python | Day6 运算符大全
    大家好,我是宁一。运算符是编程语言中最基本的知识点,是必须要掌握的,不仅适用于Python,其他编程语言也都能用到。1、算术运算符(1)加减乘除跟我们上学时学的都是一样的,注意乘法和......
  • 20天零基础自学Python | Day7 Number(数字)
    大家好,我是宁一。Python数字数据类型是用来存储数值的。是我们从小学就开始接触的老朋友了,也是python中最基础的数据类型。1、Number数据类型python3的Number数据类型包......
  • 20天零基础自学Python | Day8 String字符串
    大家好,我是宁一。字符串是以英文引号括起来的任意文本。不管是单引号还是双引号,只要成对出现的就行。比如:'abc'、"宁一"、"hello"、'123'1、获取字符串如果我们需要获取字符......
  • 20天零基础自学Python | Day9 List列表用法大全
    大家好,我是宁一。今天我们来讲讲Python列表。列表就是用来保存一组数据的,使用中括号[]将数据包起来,数据之间用英文逗号,隔开。比如:[1,2,3,4,5]1、列表特点前面课程给大家举......