Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 6, 2010 09:58:23

nauman
От:
Зарегистрирован: 2009-10-28
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы по wx.TextCtrl

Всем доброго времени суток.
Есть в принципе рабочий код, который в ОС Линукс, 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. Что сделать, чтобы консольное окно не запускалось вместе с фреймом?



Отредактировано (Окт. 6, 2010 15:16:57)

Офлайн

#2 Окт. 6, 2010 10:30:14

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Вопросы по wx.TextCtrl

зачем Вы постоянно пересоздаете TextCtrl? есть же метод SetValue()

nauman
1. Как сделать так чтобы текст в окне автоматически прокручивался к самой последней строке?
2. Как изменить цвет текста?
3. Что сделать, чтобы консольное окно не запускалось вместе с фреймом?
1. SetInsertionPointEnd (или SetInsertionPoint)
2. SetDefaultStyle



Офлайн

#3 Окт. 6, 2010 15:07:29

nauman
От:
Зарегистрирован: 2009-10-28
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы по wx.TextCtrl

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))



Отредактировано (Окт. 6, 2010 15:08:01)

Офлайн

#4 Окт. 7, 2010 03:43:49

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Вопросы по wx.TextCtrl

Попробуйте

attr = self.st1.GetDefaultStyle()
....
self.st1.SetDefaultStyle(attr)
у меня связка
self.txtctrl.SetValue(...)
self.txtctrl.SetInsertionPointEnd()
работала нормально, правда писалось это давно, а сейчас проверить не могу, под третий питон wxPython еще нет



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version