2011-03-31 96 views
5

我假设这可以用多行文本框,但不知道如何去做。我想要做的是在我的wxPython程序中创建一个日志框,在某些操作发生时我可以在其中写入消息。另外,我不仅需要在事件发生时写入消息,而且还要在代码中写入特定时间。我将如何重新绘制窗口,以便消息在该瞬间出现?如何在wxPython中制作类似于日志框的东西

+1

您有什么特别有问题的?你有什么尝试? – Philip 2011-03-31 03:57:14

+0

我在自己的应用中做过类似的事情。这里是基础知识:我用我的应用程序GTK,创建gtkTextBuffer,并将其分配给textArea。我将更多文本添加到缓冲区,并且GTK自身将其打印到textArea中。我认为在WX中应该有这样的事情。或者,也许你可以在你的应用程序中创建textarea并将文本追加到它 – Lixas 2011-03-31 05:30:52

回答

3

如果你想只是在wxPython日志对话框中,使用wx.LogWindow:

import wx 

class MainWindow(wx.Frame): 

    def __init__(self, parent=None): 
     wx.Frame.__init__(self, parent, wx.NewId(), 'Logging') 

     self.log_window = wx.LogWindow(self, 'Log Window', bShow=True) 

     box_sizer = wx.BoxSizer(orient=wx.VERTICAL)   
     show_log_button = wx.Button(self, wx.NewId(), 'Show Log') 
     show_log_button.Bind(wx.EVT_BUTTON, self._show_log)   

     log_message_button = wx.Button(self, wx.NewId(), 'Log Message') 
     log_message_button.Bind(wx.EVT_BUTTON, self._log_message) 

     box_sizer.AddMany((show_log_button, log_message_button)) 
     self.SetSizer(box_sizer) 
     self.Fit() 

     self.Bind(wx.EVT_CLOSE, self._on_close) 

    def _show_log(self, event): 
     self.log_window.Show() 

    def _log_message(self, event): 
     wx.LogError('New error message') 

    def _on_close(self, event): 
     self.log_window.this.disown() 
     wx.Log.SetActiveTarget(None) 
     event.Skip() 

if __name__ == '__main__': 
    app = wx.PySimpleApp() 
    dlg = MainWindow() 
    dlg.Show() 
    app.MainLoop() 

凡bShow在wx.LogWindow是,如果它最初显示与否。这将很好地记录你可以触发的所有wx.LogX消息,并且它仍然将它传递给任何其他处理程序。

你可以使用将记录与蟒蛇,然后,在与中有一个文本控件打开帧/窗口的另一种方法,使用的LoadFile打开日志文件:

import logging 
LOG_FILENAME = 'example.log' 
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG) 

logging.debug('This message should go to the log file') 

然后,当创建一个wx.TextCtrl地方:

log_control = wx.TextCtrl(self, wx.NewId(), style=wx.TE_MULTILINE|wx.TE_READONLY) 
log_control.LoadFile('example.log') 

编辑: 这现在工作与_on_close事件!由于Fenikso

+0

在我的设置(Windows-XP-SP3,Python 2.7.1,wxPython 2.8.11.0)上它崩溃了“python.exe遇到问题,需要关闭“。关闭。不知道为什么。 – Fenikso 2011-03-31 09:19:51

+0

现在已修复! – Iacks 2011-03-31 10:07:28

+0

嗯。这种不同的概念对我来说很奇怪。我做了一个又一个更直接的方式。我基本上将log_window移出了MainWindow,因此它是独立的,然后将MainWindow引用给了log_window。 – Fenikso 2011-03-31 10:55:28

相关问题