Создать новый диалог в PyQT + Webview

Я пытаюсь разработать красивое приложение на pyqt, используя WebView, и у меня есть небольшая проблема. Я хочу создать новое окно, нажав кнопку в WebView.

У меня есть главное окно (короткий вид):

class LoginWindow(QWidget):
    def __init__(self):
        # creating window and different properties...
        # Its not important,i think.

        self.foo = LoginConnector(self)
        view.page().mainFrame().addToJavaScriptWindowObject("foo", self.foo)

... разъем к JS

class LoginConnector(QObject):

@pyqtSlot(result=str)
def get_user_list(self):
    return ','.join(core.available_users())

@pyqtSlot()
def new_window(self):
    print 'Hello!'  
    #What can i do here?

@pyqtSlot()
def quit(self):
    QApplication.quit()

Когда я нажимаю кнопку в окне, ее вызов new_window() из LoginConnector, но как создать диалог внутри LoginConnector?

Полный код

РЕШИТЬ! Я идиот, слушай этого умного парня внизу

1 ответ

Решение

Просто посмотрите на API-документы. http://pyqt.sourceforge.net/Docs/PyQt4/classes.html Если вам это не нравится, PySide - это одно и то же с небольшими различиями в синтаксисе. http://pyside.github.io/docs/pyside/

class LoginWindow(QWebView):
    def __init__(self, *args, **kwargs):
        super(QWebView, self).__init__(*args, **kwargs):

        ...
        self.foo = LoginConnector(self)

        self.loadPage("httpdocs/login.hmtl")
    # end Constructor

    def loadPage(self, web_page):
        """Loads a web page in the browser.

        Args:
            webPage (str): The URL of the desired web page with JavaScript Python Communication.
        """
        # Inspector - right click inspect to debug javascript and have access to the console.
        inspector = QtWebKit.QWebInspector()
        inspector.setPage(self.page())

        # Force relative path otherwise you get a does not except file:// error
        if os.path.isabs(web_page):
            web_page = os.path.relpath(web_page)

        url = QtCore.QUrl(web_page)
        self.load(url)
        self.frame = self.page().mainFrame()
        self.frame.addToJavaScriptWindowObject("foo", self.foo)
    # end loadPage
# end class LoginWindow


class LoginConnector(QObject):
    @pyqtSlot()
    def new_window(self):
        self.dialog = QDialog()
        self.dialog.show() # or exec
    # end new_window
# end class LoginConnector

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)

    window = LoginWindow()
    window.show()

    sys.exit(app.exec_())

Это основная структура приложения для PySide. PyQt должен быть похожим.

Другие вопросы по тегам