多个文件多个线程间传递参数及参数应用(文本框显示)

假设在一个Frame框架中,定义一个文本框用于显示信息(持续更新)

#coding:UTF-8
#!/usr/bin/env python
#author by No9527
import wx
from threading import Thread
import threading
import queue


class MainFrameUI(wx.Frame):
    #@author: 9527  
    def __init__(self,parent):
        wx.Frame.__init__(self,parent,-1,title="这是一个Frame框架",pos=wx.DefaultPosition,
                          style=wx.SIMPLE_BORDER|wx.CAPTION|wx.CLOSE_BOX|wx.MINIMIZE_BOX)

      #设置panel面板3
      self.panel3 = wx.Panel(self,pos=(-1,350),size=(1100,450))
      self.panel3.SetBackgroundColour("#00cc99")


     
# 设置log信息显示面板 self.log_info0 = wx.StaticText(self.panel3, label="log信息显示区", pos=(30, 15),size = (480,50), style = wx.ALIGN_CENTRE_HORIZONTAL) self.log_info0.SetFont(wx.Font(18, wx.SWISS, wx.NORMAL, wx.NORMAL)) self.log_info1= wx.TextCtrl(self.panel3,value="log信息显示在这里",pos=(30, 45),size = (1020,300), style = wx.TE_READONLY|wx.TE_MULTILINE)

定义一个接收信息的队列

        #消息定义队列
        self.QueueInfo = queue.Queue(100000)    

定义一个显示方法(持续更新)

def LogInfodisplay(self):
        #@author: 9527  
        
        while True :
               
                
            AnswerInfo = self.QueueInfo.get()
                
            #调用UI的文本控件log_info1添加文本AppendText()
            self.log_info1.AppendText(AnswerInfo)
                
            #计算文本控件行数
            Text_counter = self.log_info1.GetNumberOfLines()
                
                
            #判断行数长度,移除前1000字符串
            if Text_counter > 200:
                    
                self.log_info1.Remove(0,1000) 

假设现在启用一个线程,调用一个外部文件,行驶其相关功能,那么就把队列作为参数传递给那个文件

    def GitlabINfoGet(self,event):
        
        #创建一个Dialog线程       
        
        td007 = Thread(target=self.Use_GITlabinfoget())
        td007.setDaemon(1)
        td007.start()
    
    def Use_GITlabinfoget(self):
        
        self.GITlabDialog = GITlabDialog.GitlabINfoGet(self.QueueInfo) 

在独立文件的类初始化是就作为参数传入

class GitlabINfoGet():

    def __init__(self,queueinfo):
        
        self.queue01 = queueinfo
        
        #调用put方法吧信息压入队列

        self.queue01.put("这就是示例信息")

如此一来,就完成了线程间和文件间的数据传递了;会通过LogInfodisplay()方法持续更新被压入的信息。

 

posted @ 2023-03-09 09:27  No九五二七9527  阅读(29)  评论(0)    收藏  举报