【问题标题】:1 QPushButton control 2 action from 2 different class1 个 QPushButton 控件 2 个来自 2 个不同类别的动作
【发布时间】:2013-05-18 14:29:29
【问题描述】:

这是一个 pyside GUI,我在 2 个不同的 .py 文件中创建了 2 个面板,main.py 和 sub.py 每个面板将显示一个我们浏览器的“QWebView”。目前,当用户按下 main.py 上的按钮时,它会将用户重定向到一个页面,例如“www.google”,用户必须单击 sub.py 上的按钮才能被重定向到例如“www.facebook.com”他们工作作为一个独立的函数。

我想问有没有办法将两者链接在一起,用户按下 main.py 上的按钮,两个 webbrower 会一起改变?

【问题讨论】:

    标签: python qt pyside qpushbutton


    【解决方案1】:

    是的,同一连接可以触发多个项目。

    QObject::connect(myButton, SIGNAL(clicked()), 
                         this,  SLOT(launchGoogleSiteOnBrowserA());
    QObject::connect(myButton, SIGNAL(clicked()), 
                         pointerToOtherClass, SLOT(launchFacebookSiteOnBrowserB());
    

    http://qt-project.org/doc/qt-4.8/signalsandslots.html

    编辑:关于在 PyQt 中使用信号和插槽的另一个答案...

    https://stackoverflow.com/a/7618282/999943

    这是在 PyQt 中实现的一种方法:

    widget.pyw

    from PyQt4 import QtCore, QtGui
    from mybrowser import Browser
    
    class Widget(QtGui.QWidget):
        def __init__(self):
            super(Widget, self).__init__()
            self.myButton = QtGui.QPushButton('Open Facebook and Google')
            self.myHLayout = QtGui.QHBoxLayout()
    
            self.myVLayout = QtGui.QVBoxLayout()
            self.myVLayout.addWidget(self.myButton)
    
            url = QtCore.QUrl('http://www.yahoo.com')
            self.browserLHS = Browser(url)
            self.browserRHS = Browser(url)
    
            self.myHLayout.addWidget(self.browserLHS)
            self.myHLayout.addWidget(self.browserRHS)
    
            QtCore.QObject.connect(self.myButton, QtCore.SIGNAL("clicked()"), self.changePageOnBothBrowsers )
    
            self.myVLayout.addLayout(self.myHLayout)
    
            self.setLayout(self.myVLayout)
    
        def changePageOnBothBrowsers(self):
            self.browserLHS.load(QtCore.QUrl.fromUserInput('google.com'))
            self.browserRHS.load(QtCore.QUrl.fromUserInput('facebook.com'))
    
    if __name__ == '__main__':
        import sys
    
        app = QtGui.QApplication(sys.argv)
    
        widget = Widget()
        widget.show()
    
        sys.exit(app.exec_())
    

    mybrowser.pyw

    from PyQt4 import QtCore, QtGui, QtNetwork, QtWebKit
    
    import jquery_rc
    
    class Browser(QtWebKit.QWebView):
        def __init__(self, url):
            super(Browser, self).__init__()
    
            self.progress = 0
    
            fd = QtCore.QFile(":/jquery.min.js")
    
            if fd.open(QtCore.QIODevice.ReadOnly | QtCore.QFile.Text):
                self.jQuery = QtCore.QTextStream(fd).readAll()
                fd.close()
            else:
                self.jQuery = ''
    
            QtNetwork.QNetworkProxyFactory.setUseSystemConfiguration(True)
    
    
            self.load(url)
            self.loadFinished.connect(self.adjustLocation)
            self.titleChanged.connect(self.adjustTitle)
            self.loadProgress.connect(self.setProgress)
            self.loadFinished.connect(self.finishLoading)
    
            self.locationEdit = QtGui.QLineEdit(self)
            self.locationEdit.setSizePolicy(QtGui.QSizePolicy.Expanding,
                    self.locationEdit.sizePolicy().verticalPolicy())
            self.locationEdit.returnPressed.connect(self.changeLocation)
    
        def adjustLocation(self):
            self.locationEdit.setText(self.url().toString())
    
        def changeLocation(self):
            url = QtCore.QUrl.fromUserInput(self.locationEdit.text())
            self.load(url)
            self.setFocus()
    
        def adjustTitle(self):
            if 0 < self.progress < 100:
                self.setWindowTitle("%s (%s%%)" % (self.title(), self.progress))
            else:
                self.setWindowTitle(self.title())
    
        def setProgress(self, p):
            self.progress = p
            self.adjustTitle()
    
        def finishLoading(self):
            self.progress = 100
            self.adjustTitle()
            self.page().mainFrame().evaluateJavaScript(self.jQuery)
    
    #if __name__ == '__main__':
    #
    #    import sys
    #
    #    app = QtGui.QApplication(sys.argv)
    #
    #    if len(sys.argv) > 1:
    #        url = QtCore.QUrl(sys.argv[1])
    #    else:
    #        url = QtCore.QUrl('http://www.google.com/ncr')
    #
    #    browser = Browser(url)
    #    browser.show()
    #
    #    sys.exit(app.exec_())
    

    希望对您有所帮助。

    【讨论】:

    • 感谢您提供的信息,我想知道我是否有 2 个不同的 Web 浏览器窗口设计,我必须从 2 个不同的脚本导入吗?
    猜你喜欢
    • 2015-04-16
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    相关资源
    最近更新 更多