1

戻るボタン (アドレスバーなし) があり、ダウンロードできる単純なブラウザーを作成する必要があります。atm、ダウンロードできます(ここからのコードを使用:PySide QWebViewおよびサポートされていないコンテンツのダウンロード)が、戻るボタンを追加するためにツールバーを追加できません。今、実行すると、2 つのウィンドウが作成されます。1 つはブラウザー、もう 1 つはツールバーです。両方を単一のウィンドウに表示するにはどうすればよいですか?

import sys
import os
from time import sleep
from PySide import QtCore, QtGui, QtWebKit, QtNetwork

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):      

        hbox = QtGui.QHBoxLayout(self)
        pixmap = QtGui.QPixmap("tux.png")

        lbl = QtGui.QLabel(self)
        lbl.setPixmap(pixmap)

        hbox.addWidget(lbl)
        self.setLayout(hbox)

        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('Red Rock')
        self.show()

        #self.hide()        

class Browser(QtGui.QMainWindow):

    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.web = QtWebKit.QWebView()
        self.tb=self.addToolBar("Toolbar")
        self.tb.show()
        self.web.page().setForwardUnsupportedContent(True)
        self.web.page().unsupportedContent.connect(self.download)

        self.manager = QtNetwork.QNetworkAccessManager()
        self.manager.finished.connect(self.finished)
        self.pbar=QtGui.QProgressBar()
        self.pbar.setMaximumWidth(120)


        exitAction = QtGui.QAction(QtGui.QIcon('ceva.png'), 'Exit', self)
        exitAction.setShortcut('Ctrl+Q')
        exitAction.triggered.connect(self.close)


        backAction = QtGui.QAction(QtGui.QIcon('tux.png'), 'Back', self)
        backAction.setShortcut('Ctrl+A')
        backAction.triggered.connect(self.close)


        self.toolbar = self.addToolBar('Exit')
        self.toolbar.addAction(exitAction)
        self.toolbar.addAction(backAction)

        self.setGeometry(300, 300, 350, 250)
        #self.setWindowTitle('Toolbar')    
        self.show()

    def download(self, reply):
        # this just shows me a picture to know it's downloading
        self.loading=Example()

        self.request = reply.request()
        self.request.setUrl(reply.url())
        self.reply = self.manager.get(self.request)

    def finished(self):
        path = os.path.expanduser(
            os.path.join('~',
                     unicode(self.reply.url().path()).split('/')[-1]))
        if self.reply.hasRawHeader('Content-Disposition'):
            cnt_dis = self.reply.rawHeader('Content-Disposition').data()
            if cnt_dis.startswith('attachment'):
                path = cnt_dis.split('=')[1]

        destination = QtGui.QFileDialog.getSaveFileName(self, "Save", path)
        if destination:
            f = open(destination[0], 'wb')
            f.write(self.reply.readAll())
            f.flush()
            f.close()

if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)

    browser = Browser()
    if len(sys.argv) > 1:
        browser.web.load(QtCore.QUrl('http://' + argv[1]))
    else:
        browser.web.load(QtCore.QUrl('http://www.google.com'))

    browser.web.show()

    sys.exit(app.exec_())
4

1 に答える 1

1

WebView を親ウィンドウの子にするだけです。親は であるため、そのためにsetCentralWidgetQMainWindowを使用する必要があります。

    self.web = QtWebKit.QWebView()
    self.setCentralWidget(self.web)

show()また、メイン ウィンドウの子であるウィジェットを呼び出す必要がないため、 と を削除self.tb.show()self.show()て、次のようにするBrowser.__init__だけです。

    browser.show()
    sys.exit(app.exec_())
于 2013-11-02T01:00:28.203 に答える