Найти - Пользователи
Полная версия: wxPython, Logo.
Начало » GUI » wxPython, Logo.
1
Levelup
Здравствуйте!

Есть два класса: первый - фрэйм, основное окно программы, второй - фрейм, панель с текстом и логотипом. Необходимо сделать чтобы во время загрузки основновного окна появлялся логотип, а после исчезал. Подскажите, пожалуйста, как лучше это реализовать? Обязательно ли в данном случае применять многопоточность или создавать несколько процессов? Потому как у меня возникают проблемы с mainloop'ами.

if __name__ == ‘__main__’:
logoapp = wx.App(False)
logo = LogoFrame()
logo.Show(True)
logoapp.MainLoop()

app = wx.App(False)
frame = AuiFrame()
frame.Show(True)
logo.Close()
frame.OpenFiles()
app.MainLoop()
Piton23
Хех решал такой вопрос недавно. Не мало времени убил. Я применял многопоточность, а иначе будет зависание программы. Хотя не знаю что у вас за логотип, но я гивку использовал (типа сигнализирующая, ждите идет загрузка).

Если ж у вас логотип тупо картинка, то скорей всего через wx.Yield можно решить проблему (не затрагивая многопоточность).
Так же я сталкивался с проблемой что рисовать контролы можно только из основного потока. Т.е. если ты использовать будешь многопоточность то ты должен из второстепенного потока вызвать пользовательское событие (которое будет обрабатываться из основного)

Читать про Yield PostEvent. Так же взгляни на эту тему http://python.su/forum/viewtopic.php?id=13502

Чет не просмотрел даже код сначала MainLoop вроде как бесконечный цикл, и не будет выполняться
app = wx.App(False)
пока не будет закрыт первый фрэим
Levelup
Piton23
Чет не просмотрел даже код сначала MainLoop вроде как бесконечный цикл, и не будет выполняться
app = wx.App(False)
пока не будет закрыт первый фрэим
Да, все верно - не будет. Это я так, для полноты представления вставил данный кусок кода :)

Спасибо за информацию! Буду разбираться.
pyuser
В демонстрашке wxpython есть пример: AdvancedSplash.py
Levelup
pyuser
В демонстрашке wxpython есть пример: AdvancedSplash.py
Есть, но все равно придется использовать многопоточность.
Levelup
Сделал с помощью мультипроцессинга. Может кому понадобится:

class MainFrame(wx.Frame)
bla bla bla

class LogoFrame(wx.Frame):
def __init__(self, parent = None):
wx.Frame.__init__(self, parent, -1, “Logo Frame”,
style =
wx.FRAME_SHAPED
| wx.SIMPLE_BORDER
| wx.FRAME_NO_TASKBAR
| wx.STAY_ON_TOP
)

self.Bind(wx.EVT_PAINT, self.OnPaint)

self.bmp = wx.Image(os.path.expanduser('~/.Apex/logo.png')).ConvertToBitmap()
w, h = self.bmp.GetWidth(), self.bmp.GetHeight()
self.SetClientSize( (w, h) )
self.Center()

def OnPaint(self, evt):
dc = wx.PaintDC(self)
wx.StaticBitmap(self, -1, self.bmp, (1, 1), (self.bmp.GetWidth(), self.bmp.GetHeight()))


def showLogo():
lapp = wx.App(False)
logo = LogoFrame()
logo.Show(True)
lapp.MainLoop()

if __name__ == ‘__main__’:
p = multiprocessing.Process(target = showLogo)
p.start()
app = wx.App(False)
frame = MainFrame()
frame.Show(True)
p.terminate()
app.MainLoop()
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