我是Python的新手,所以我也是wxPython的新手。我只是想知道这些wx之间有没有区别。TextCtrl函数。这个小代码显示三次相同的输出。如果没有区别,这些功能是否有历史原因?
import wx
class testUI(wx.Panel):
textCtrl = ''
def __init__(self, parent, name):
super(testUI, self).__init__(parent, name=name)
self.buildUI()
self.Show(True)
self.textCtrl.write('blin')
self.textCtrl.WriteText('blan')
self.textCtrl.AppendText('blubn')
def buildUI(self):
self.textCtrl = wx.TextCtrl(self, style=wx.TE_MULTILINE|wx.TE_READONLY)
box = wx.BoxSizer(wx.VERTICAL)
box.Add(self.textCtrl, proportion=1, flag=wx.EXPAND)
def main():
app = wx.App(False)
root = wx.Frame(parent=None, title='testUI')
testUI(parent=root, name='testUI')
root.Show(True)
app.MainLoop()
# Standard boilerplate to call the main() function.
if __name__ == '__main__':
main()
谢谢:)
猜测人们可能会因为和我一样的原因点击这个线程,那就是wxPython(4.0.1)的"新"版本将write()列为wx上的一个方法。TextCtrl类-但它没有定义。我需要一个写函数才能使用日志记录。StreamHandler类;因为这些方法都应该做同样的事情,所以我用一个赋值重新创建了缺失的write方法——这很有效:
import wx
import logging
lgr = logging.getLogger(__name__)
lgr.setLevel(logging.DEBUG)
fmt = logging.Formatter('%(asctime)s: %(name)s [%(levelname)s] %(message)s')
debug = lgr.debug
class LogTab(wx.Panel):
def __init__(self, *args, **kwds):
kwds["style"] = wx.TAB_TRAVERSAL
wx.Panel.__init__(self, *args, **kwds)
self.text_log = wx.TextCtrl(self, wx.ID_ANY, "",
style=wx.TE_MULTILINE | wx.TE_READONLY)
self.text_log.write = self.text_log.WriteText
self.__set_properties()
self.__do_layout()
self.log_handler = logging.StreamHandler(self.text_log)
self.log_handler.setFormatter(fmt)
lgr.addHandler(self.log_handler)
这三个方法在功能上似乎是相同的。然而,我认为您应该使用AppendText
向文本控件添加额外的文本,以使您在代码本身中所做的事情非常清楚。大多数时候,您通常会使用SetValue
。我在重定向stdout时使用了WriteText
,但仅此而已
- http://www.blog.pythonlibrary.org/2009/01/01/wxpython-redirecting-stdout-stderr/
编辑:
好吧,与其阅读我的全部答案,.AppendText()
和.WriteText()
之间的区别似乎是,第一个将文本添加到文本控件的末尾,第二个将其添加到当前插入点,如下所述。
旧答案(可能仍然可用作示例):
嗯。。奇怪的我之所以来到这里,是因为在wx.stc.StyledTextCtrl()
上使用.WriteText()
会产生奇怪的结果。我现在把它改成了.write()
,它很有效。
我使用wx.stc.StyledTextCtrl()
作为一个拖放窗口,它列出了已删除的文件路径。但是,由于窗口也是可编辑的(我需要它),InsertionPoint可以位于任何位置。
因此,每当有人将一个新的文件路径(或多个文件路径)放到我的wx.stc.StyledTextCtrl()
上时,我都需要它来检查当前InsertionPoint
的位置。如果InsertionPoint
位于已包含文本的行中,则需要将其移动到该特定行的末尾。从那里它需要打印一个换行符和接收到的文件路径。
我的代码如下:
def write_interactive(self, text):
curPos = self.interactivewindow.GetInsertionPoint()
lineVal,curCol,curRow = self.interactivewindow.PositionToXY(curPos)
lineNum = curRow
lineText = self.interactivewindow.GetLineText(lineNum)
if len(lineText) > 0:
endOfLine = self.interactivewindow.XYToPosition(len(lineText), curRow)
self.interactivewindow.SetInsertionPoint(endOfLine)
self.interactivewindow.write('n' + text)
else:
self.interactivewindow.write(text)
现在,关于您的问题,我注意到当使用self.interactivewindow.WriteText(text)
时,位于初始InsertionPoint
和特定行末尾之间的文本将消失。新的文本就写在上面。但是,当使用self.interactivewindow.write(text)
时,一切都很好。