2016-11-29 161 views
1

我是PyGt的一名完全新手程序员。我已经阅读了关于PyGt4的书,但现在我们有了PyGt5,而且我无法从书中运行我的例子。如何将此代码从PyQt4转换为PyQt5

例如,这是从书(最简单的)第一个例子中可以看到

from PyQt5 import QtCore, QtGui 

但它在书中

from PyQt4 import QtCore, QtGui 

,但我写PyQt5,因为我只有PyQt5

# -*- coding: utf-8 -*- 
from PyQt5 import QtCore, QtGui 
import sys 

app = QtGui.QApplication(sys.argv) 
window = QtGui.QWidget() 
window.setWindowTitle("The first program in PyQt") 
window.resize(300, 70) 
label = QtGui.QLabel("<center>Hello, world!</center>") 
btnQuit = QtGui.QPushButton("&Close window") 
vbox = QtGui.QVBoxLayout() 
vbox.addWidget(label) 
vbox.addWidget(btnQuit) 
window.setLayout(vbox) 
QtCore.QObject.connect(btnQuit, QtCore.SIGNAL("clicked()"), 
QtGui.qApp, QtCore.SLOT("quit()")) 
window.show() 
sys.exit(app.exec_()) 

错误:AttributeError:模块'PyQt5.QtGui'没有属性'QApplication'

我试图找到解决办法: 我试图运行此代码。不起作用。我的程序工作,但我不能关闭按钮“关闭窗口”

from PyQt5.QtWidgets import QApplication, QWidget 
from PyQt5 import QtCore, QtGui 
from PyQt5.QtCore import QObject, pyqtSignal 
from PyQt5.QtWidgets import * 
import sys 

app = QApplication(sys.argv) 
window = QWidget() 
window.setWindowTitle("The first example in PyQt") 
window.resize(300, 70) 

label = QLabel("<center>Hello, world!</center>") 
btnQuit = QPushButton("&Close window") 
vbox = QVBoxLayout() 
vbox.addWidget(label) 
vbox.addWidget(btnQuit) 
window.setLayout(vbox) 

closed = pyqtSignal() 
range_changed = pyqtSignal(int, int, name='rangeChanged') 
valueChanged = pyqtSignal([int], ['QString']) 

window.show() 
sys.exit(app.exec_()) 
+1

一般:检查(PY)QT5的文档和搜索缺课。它可能只是在另一个模块中。 – Trilarion

+0

http://pyqt.sourceforge.net/Docs/PyQt5/pyqt4_differences.html – matth

回答

2

要关闭你的窗口,你必须连接您的按钮,点击信号到你的窗口

btnQuit.clicked.connect(window.close) 

整个代码会的关闭功能是:

from PyQt5.QtWidgets import * 
from PyQt5.QtCore import pyqtSignal 
import sys 

app = QApplication(sys.argv) 
window = QWidget() 
window.setWindowTitle("The first example in PyQt") 
window.resize(300, 70) 

label = QLabel("<center>Hello, world!</center>") 
btnQuit = QPushButton("&Close window") 
vbox = QVBoxLayout() 
vbox.addWidget(label) 
vbox.addWidget(btnQuit) 
window.setLayout(vbox) 

btnQuit.clicked.connect(window.close) 

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

要小心,你的未使用的进口,你应该使用

from PyQt5 import QtWidgets 

并更换由QtWidgets.QApplicationQApplicationQLabel通过QtWidgets.QLabel等等

请记住,因为这PyQt5信号已经改变风格:Description