2011-03-31 77 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

相關問題