如何将此代码从 PyQt4 转换为 PyQt5 [英] How to translate this code from PyQt4 to PyQt5

查看:143
本文介绍了如何将此代码从 PyQt4 转换为 PyQt5的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是一个完整的 PyGt 新手程序员.我已经阅读了关于 PyGt4 的书,但现在我们有了 PyGt5,我无法运行书中的示例.

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

from PyQt5 import QtCore, QtGui

但它在书中

from PyQt4 import QtCore, QtGui

但是我写了 PyQt5 因为我只有 PyQt5

# -*- 编码:utf-8 -*-从 PyQt5 导入 QtCore、QtGui导入系统app = QtGui.QApplication(sys.argv)窗口 = QtGui.QWidget()window.setWindowTitle("PyQt 中的第一个程序")window.resize(300, 70)label = QtGui.QLabel("<center>Hello, world!</center>")btnQuit = QtGui.QPushButton("&关闭窗口")vbox = QtGui.QVBoxLayout()vbox.addWidget(标签)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从 PyQt5 导入 QtCore、QtGui从 PyQt5.QtCore 导入 QObject,pyqtSignal从 PyQt5.QtWidgets 导入 *导入系统app = QApplication(sys.argv)窗口 = QWidget()window.setWindowTitle("PyQt 中的第一个例子")window.resize(300, 70)label = QLabel("<center>Hello, world!</center>")btnQuit = QPushButton("&关闭窗口")vbox = QVBoxLayout()vbox.addWidget(标签)vbox.addWidget(btnQuit)window.setLayout(vbox)关闭 = pyqtSignal()range_changed = pyqtSignal(int, int, name='rangeChanged')valueChanged = pyqtSignal([int], ['QString'])window.show()sys.exit(app.exec_())

解决方案

要关闭窗口,您必须将按钮单击信号连接到窗口的关闭功能

btnQuit.clicked.connect(window.close)

整个代码将是:

 from PyQt5.QtWidgets import *从 PyQt5.QtCore 导入 pyqtSignal导入系统app = QApplication(sys.argv)窗口 = QWidget()window.setWindowTitle("PyQt 中的第一个例子")window.resize(300, 70)label = QLabel("<center>Hello, world!</center>")btnQuit = QPushButton("&关闭窗口")vbox = QVBoxLayout()vbox.addWidget(标签)vbox.addWidget(btnQuit)window.setLayout(vbox)btnQuit.clicked.connect(window.close)window.show()sys.exit(app.exec_())

小心你未使用的导入,你应该使用

from PyQt5 import QtWidgets

并将 QApplication 替换为 QtWidgets.QApplication,将 QLabel 替换为 QtWidgets.QLabel 等...

请记住,自 PyQt5 以来信号已经改变了样式:说明

I'm a complete novice programmer in PyGt. I have read the book about PyGt4 but now we have PyGt5 and I can not run my examples from book.

For example, this is the first example from the book (the easiest) You can see

from PyQt5 import QtCore, QtGui 

but it's in the book

from PyQt4 import QtCore, QtGui 

but I wrote PyQt5 because I have only 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_())

Error: AttributeError: module 'PyQt5.QtGui' has no attribute 'QApplication'

My attemp to find solution: I tried to run this code. Does not work. My program works but I can not close button "Close window"

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

解决方案

To close your window you have to connect your button clicked signal to the close function of your window

btnQuit.clicked.connect(window.close)

The whole code would be :

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

Be careful for your unused imports, you should use

from PyQt5 import QtWidgets

and replace QApplication by QtWidgets.QApplication, QLabel by QtWidgets.QLabel etc...

Keep in mind that signals have changed style since PyQt5 : Description

这篇关于如何将此代码从 PyQt4 转换为 PyQt5的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆