Creat a Log window in Python

可紊 提交于 2019-12-25 06:43:17

问题


I want a script in python which opens a logger window when the test is running and the output I want to see will be pushed to the logger window. I found baisc GUI script using wxpython but I dont know how to push my output to the gui being opened. Can anyone help me?

My Code:

import wx
import thread
import threading

class ExamplePanel(wx.Panel):        
        def __init__(self, parent):
            wx.Panel.__init__(self, parent)
            self.quote = wx.StaticText(self, label="Your Log :", pos=(10, 10))

            self.logger = wx.TextCtrl(self, pos=(0,40), size=(1100,1100), style=wx.TE_MULTILINE | wx.TE_READONLY)
        def append_txt(self,txt):
            self.logger.AppendText(txt)




def sample_Window():
    app = wx.App(False)
    frame = wx.Frame(None)
    panel = ExamplePanel(frame)
    frame.Show()
    panel.append_txt("Log Starts Here\n First line of code \n Second line of code ")
    app.MainLoop()

sample_Window()

Once I give the app.Mainloop I am not able give further input to the appendtext method. I got suggestions to use threading to run the append_txt as a separate thread to pass the argument but i am not sure how to do it. My goal is call a method and pass on the text as argument which will show the text in logger window.


回答1:


The simpliest way to do it is to embed your task into the panel, and start it with a thread:

import wx
import thread
import threading
import time

class ExamplePanel(wx.Panel):        
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.quote = wx.StaticText(self, label="Your Log :", pos=(10, 10))

        self.logger = wx.TextCtrl(self, pos=(0,40), size=(1100,1100), style=wx.TE_MULTILINE | wx.TE_READONLY)

        ########################################################################
        # Use a thread to start your task
        ########################################################################
        task_thread = threading.Thread(target = self.my_task, args = ())
        task_thread.setDaemon(True)
        task_thread.start()

    def append_txt(self,txt):
        self.logger.AppendText(txt)

    def my_task(self):
        ########################################################################
        # Do your job right here and update log
        ########################################################################
        for i in range(100):
            self.append_txt('\nNew line added(No.%s)' % (i + 1))

            time.sleep(1)


def sample_Window():
    app = wx.App(False)
    frame = wx.Frame(None)
    panel = ExamplePanel(frame)
    frame.Show()
    panel.append_txt("Log Starts Here\n First line of code \n Second line of code ")
    app.MainLoop()

sample_Window()

Update:

Well, here's another way to do it:

import wx
import thread
import threading
import time

class ExamplePanel(wx.Panel):        
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.quote = wx.StaticText(self, label="Your Log :", pos=(10, 10))

        self.logger = wx.TextCtrl(self, pos=(0,40), size=(1100,1100), style=wx.TE_MULTILINE | wx.TE_READONLY)

    def append_txt(self,txt):
        self.logger.AppendText(txt)

def sample_Window():
    app = wx.App(False)
    frame = wx.Frame(None)
    panel = ExamplePanel(frame)
    frame.Show()
    panel.append_txt("Log Starts Here\n First line of code \n Second line of code ")

    ############################################################################
    # Use thread to update logs
    ############################################################################
    task_thread = threading.Thread(target=my_task, args=(panel, ))
    task_thread.setDaemon(True)
    task_thread.start()

    app.MainLoop()

def my_task(panel):
    ############################################################################
    #  Do your job right here and update log
    ############################################################################
    for i in range(100):
        panel.append_txt('\nNew line added(No.%s)' % (i + 1))

        time.sleep(1)

sample_Window()


来源:https://stackoverflow.com/questions/32758536/creat-a-log-window-in-python

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!