2014-07-15 60 views
-1

我正嘗試在使用WebView的pyqt中開發外觀漂亮的應用程序,並且有一點問題。 我想通過在WebView中按下按鈕來創建新窗口。在PyQT + 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內部創建Dialog?

Full code

解決了!我是個笨蛋,聽着下面的聰明人

回答

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應該是相似的。

+0

我試圖做這樣的事情.Windows出現但沒有初始化。代碼在這裏http://pastebin.com/rk9HaN0C。我不會看到「Init!」在控制檯中,窗口顯示爲無標題和WebView。 – progerz

+0

看起來您並未將佈局設置爲對話框。 self.setLayout(佈局)。 self.setWindowTitle(「Name」)設置PySide的標題(我不使用pyqt)。該代碼沒有圍繞QObject類包裝new_window方法,但它看起來像你這樣做,只是沒有發佈你的所有代碼。 – HashSplat

+0

是的,我知道,完整的代碼在這裏http://pastebin.com/283R2A39。 我在CreateUser類的某處發現了這個問題,現在我試圖找到bug。 – progerz