gpt4 book ai didi

python - 无法使用 PySide (Python) 添加工具栏

转载 作者:太空宇宙 更新时间:2023-11-03 18:44:56 25 4
gpt4 key购买 nike

我需要制作一个简单的浏览器,它有一个后退按钮(没有地址栏),并且可以下载东西。atm,它可以下载(使用这里的代码: PySide QWebView and downloading unsupported content ),但我无法添加工具栏以添加后退按钮。现在,当我运行它时,它会创建 2 个窗口:一个带有浏览器,一个带有工具栏。我怎样才能让它们都在一个窗口中?

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_())

最佳答案

您只需将 webview 设为其父窗口的子窗口即可。由于父级是 QMainWindow,因此您应该使用 setCentralWidget为此:

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

此外,您不需要在主窗口子窗口小部件上调用 show(),因此您可以删除 self.tb.show()和来自 Browser.__init__self.show(),然后执行:

    browser.show()
sys.exit(app.exec_())

关于python - 无法使用 PySide (Python) 添加工具栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19737432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com