Найти - Пользователи
Полная версия: Вопросы по wx.TextCtrl
Начало » GUI » Вопросы по wx.TextCtrl
1
nauman
Всем доброго времени суток.
Есть в принципе рабочий код, который в ОС Линукс, python 2.6 читает с определенной переодичносистью текстовый файл и при его изменении выводит его в фрейме.
import wx,os

class MainFrame(wx.Frame):
def __init__(self, image,parent=None, id=-1):
wx.Frame.__init__(self,parent,-1,size=(500,500),pos=(1200,0),title='Info Pannel',
style=(wx.DEFAULT_FRAME_STYLE | wx.FRAME_NO_TASKBAR | wx.RESIZE_BORDER) ^ (wx.CAPTION))
# ^ (wx.CAPTION)
#func()
f_path='/var/log/syslog'
t_file=open(f_path,'r')
info=t_file.read()
self.cur_length = info
self.prv_length = 0
t_file.close()
self.pnl = wx.Panel(self, -1, size=(500,500), style=wx.NO_BORDER)
#pnl.SetBackgroundColour(wx.BLACK)
#pnl.SetForegroundColour(wx.GREEN)
self.vbox = wx.BoxSizer(wx.VERTICAL)
self.st1 = wx.TextCtrl(self.pnl, -1, info, size=(500,500), style=wx.ALIGN_LEFT | wx.TE_MULTILINE | wx.TE_WORDWRAP | wx.TE_RICH2)
color = wx.Color(192, 192, 192)
self.st1.SetBackgroundColour("Yellow")
self.st1.SetDefaultStyle(wx.TextAttr(color))
#self.st1.SetValue(info)
self.st1.SetInsertionPointEnd() #Прокручивает текст к последней строке
self.vbox.Add(self.st1, -1, wx.EXPAND | wx.TOP | wx.BOTTOM)
self.pnl.SetSizer(self.vbox)

self.timer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)
self.timer.Start(1000)

def OnTimer(self, evt):
f_path='/var/log/syslog'
t_file=open(f_path,'r')
self.info=t_file.read()
self.cur_length=len(self.info)
t_file.close()

if self.cur_length != self.prv_length:
self.read_file()
self.prv_length=self.cur_length
self.st1 = wx.TextCtrl(self.pnl, -1, self.info, size=(500,500), style=wx.ALIGN_LEFT | wx.TE_MULTILINE | wx.TE_WORDWRAP | wx.TE_RICH2)
self.st1.SetBackgroundColour("Yellow")
self.st1.SetInsertionPointEnd() #Не работает


class App(wx.App):
def OnInit(self):
frame=MainFrame(None)
frame.Show()
return True

def main():
app = App()
app.MainLoop()

if __name__ == '__main__':
main()
1. Как сделать так чтобы текст в окне автоматически прокручивался к самой последней строке?
2. Как изменить цвет текста?
3. Что сделать, чтобы консольное окно не запускалось вместе с фреймом?
pyuser
зачем Вы постоянно пересоздаете TextCtrl? есть же метод SetValue()
nauman
1. Как сделать так чтобы текст в окне автоматически прокручивался к самой последней строке?
2. Как изменить цвет текста?
3. Что сделать, чтобы консольное окно не запускалось вместе с фреймом?
1. SetInsertionPointEnd (или SetInsertionPoint)
2. SetDefaultStyle
nauman
1 self.st1.SetInsertionPointEnd() действительно прокручивает окно в самый низ, но только из def __init__. В def OnTimer она уже почемуто не работает.
2 Перепробовал что нашел из описания и примеров в инете, цвет шрифта не меняется:

color = wx.Color(192, 192, 192)
self.st1.SetDefaultStyle(wx.TextAttr(color))

self.st1.SetDefaultStyle(wx.TextAttr(“red”))

self.st1.SetDefaultStyle(wx.TextAttr(wx.RED))
pyuser
Попробуйте
attr = self.st1.GetDefaultStyle()
....
self.st1.SetDefaultStyle(attr)
у меня связка
self.txtctrl.SetValue(...)
self.txtctrl.SetInsertionPointEnd()
работала нормально, правда писалось это давно, а сейчас проверить не могу, под третий питон wxPython еще нет
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB