Уведомления

Группа в Telegram: @pythonsu

#1 Май 19, 2008 22:25:29

Jenyay
От:
Зарегистрирован: 2007-08-10
Сообщения: 173
Репутация: +  1  -
Профиль   Отправить e-mail  

Виснет wxHtmlWindow

Привет. Пытаюсь показывать html с помощью wxHtmlWindow. Когда подсовываю ему html, который содержит только картинки на диске, все работает нормально. Как только даю ему html с картинками, которые надо скачать из нета, питон начинает грузить проц на 100%. Та же проблема, если попытаться загрузить саму страницу из инета.

Вот пример который нашел в нете. Он у меня тоже виснет:

import wx
import wx.html
class MyHtmlFrame(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, title, size=(600,400))
        self.CreateStatusBar()
        html = wx.html.HtmlWindow(self)
        if "gtk2" in wx.PlatformInfo:
            html.SetStandardFonts()   
        html.SetRelatedFrame(self, self.GetTitle() + " -- %s") 
        html.SetRelatedStatusBar(0)  
        html.LoadPage("http://wxwidgets.org/manuals/2.5.4/wx_wxbutton.html")
app = wx.PySimpleApp()
frm = MyHtmlFrame(None, "Simple HTML Browser")
frm.Show()
app.MainLoop()

Python 2.5, Win XP + SP2



Офлайн

#2 Май 20, 2008 08:50:33

hellslade
От:
Зарегистрирован: 2008-01-28
Сообщения: 240
Репутация: +  0  -
Профиль   Отправить e-mail  

Виснет wxHtmlWindow

Jenyay
виснет наверно потому, что LoadPage вызывается до вызова MainLoop
попробуй вызвать LoadPage на событие в меню например. Я вот так писАл:

# -*- coding:cp1251 -*-
import wx
import wx.html
image_dir = 'images/'
ID_LOAD_PAGE = wx.NewId()
ID_EXIT = wx.NewId()
MENU_CONTROLS = {
            'Файл':(
                [ID_LOAD_PAGE, True, '', 'Загрузить', 'Загрузить Google', 'Load'],
                [None, False, '', '', '', ''],
                [ID_EXIT, True, '', 'Выход', 'Закрытие приложения', 'OnClose'],
                    ),
                }
class MyHtmlFrame(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, title, size=(600,400))
        self.menubar = wx.MenuBar()
        self.CreateMenu()
        self.SetMenuBar(self.menubar)
        self.CreateStatusBar()
        sizer = wx.BoxSizer()
        self.html = wx.html.HtmlWindow(self)
        sizer.Add(self.html, 1, wx.EXPAND|wx.ALL)
        self.SetSizer(sizer)
        if "gtk2" in wx.PlatformInfo:
            self.html.SetStandardFonts()   
        self.html.SetRelatedFrame(self, self.GetTitle() + " -- %s") 
        self.html.SetRelatedStatusBar(0)  
    
    def Load(self, evt):
        self.html.LoadPage("http://www.google.ru")
    def CreateMenu(self):
        for name in MENU_CONTROLS.keys():
            menu = wx.Menu()
            for id, bool, ico, short, long, func in MENU_CONTROLS[name]:
                if id == None:
                    menu.AppendSeparator()
                    continue
                item = wx.MenuItem(menu, id, short, long )
                if ico != '':
                    bmp = wx.Image(image_dir+ico,wx.BITMAP_TYPE_ICO).ConvertToBitmap()
                    item.SetBitmap(bmp)
                item.Enable(bool)
                menu.AppendItem(item)
                exec("self.Bind(wx.EVT_MENU, self."+func+", item)")
            self.menubar.Append(menu, name)
    def OnClose(self, evt):
        self.Destroy()
app = wx.PySimpleApp()
frm = MyHtmlFrame(None, "Simple HTML Browser")
frm.Show()
app.MainLoop()
гугл успешно загружается :)



Офлайн

#3 Май 20, 2008 09:06:36

Jenyay
От:
Зарегистрирован: 2007-08-10
Сообщения: 173
Репутация: +  1  -
Профиль   Отправить e-mail  

Виснет wxHtmlWindow

hellslade

Спасибо, действительно из-за этого. В обработчиках событий все работает нормально.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version