2014-07-15 1 views
-1

필자는 WebView를 사용하여 pyqt에서 멋진 모양의 응용 프로그램을 개발하려고하고 있으며 약간의 문제가 있습니다. WebView에서 버튼을 눌러 새 창을 만들고 싶습니다. `난 창에서 버튼을 누를 때 (그 콜 new_window을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() 

행 :

는 I는 메인 윈도우 (짧은보기)가) LoginConnector,하지만 Dialog를 LoginConnector 내에서 만드는 방법은 무엇입니까?

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 (layout). self.setWindowTitle ("Name")은 PySide의 제목을 설정합니다 (저는 pyqt를 사용하지 않습니다). 이 코드는 QObject 클래스를 감싸는 new_window 메소드를 가지고 있지 않지만, 코드를 게시하지 않았던 것처럼 보입니다. – HashSplat

+0

예, 알고 있습니다. 전체 코드는 http://pastebin.com/283R2A39입니다. CreateUser 클래스 어딘가에서 문제를 발견하고 지금 버그를 찾으려고합니다. – progerz