0

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

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

4

1 回答 1

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 中执行此操作的一种方法:

小部件.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_())

我的浏览器.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_())

希望有帮助。

于 2013-05-18T05:13:42.897 回答