“PySide2.QtWidgets.QApplication”对象没有属性“exec”

Deb*_*Fox 4 python pyside2

我正在阅读有关 Python 和 Qt 上的 Tabwidgets 的教程。我已经了解了它的基础知识。我想编写一个包含多个选项卡的应用程序,其中每个选项卡由多个小部件组成。我发现了一个关于codeloop的很棒的教程,其中使用了 PyQt5。我按照教程进行操作,但我用 PySide 2 替换了 PyQt5。不幸的是,它似乎无法在我的系统上运行。

我收到以下错误:

File "/home/conan/python/advanced/GUI/Qt/tabwidget-advanced.py", line 81, in <module>
    app.exec()
AttributeError: 'PySide2.QtWidgets.QApplication' object has no attribute 'exec'
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

from PySide2 import QtGui
from PySide2.QtWidgets import QApplication, QDialog, QTabWidget, QComboBox, QCheckBox, QGroupBox, QVBoxLayout, QWidget, \
QLabel, QLineEdit, QDialogButtonBox
from PySide2.QtGui import QIcon, QFont
import sys


class Tab(QDialog):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("PyQt5 TabWidget Example")
        self.setWindowIcon(QIcon("icon.png"))
        # self.setStyleSheet('background-color:grey')
        vbox = QVBoxLayout()
        tabWidget = QTabWidget()
        buttonbox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
        buttonbox.accepted.connect(self.accept)
        buttonbox.rejected.connect(self.reject)
        tabWidget.setFont(QtGui.QFont("Sanserif", 12))
        tabWidget.addTab(TabContact(), "Contact Details")
        tabWidget.addTab(TabPeronsalDetails(), "Personal Details")
        vbox.addWidget(tabWidget)
        vbox.addWidget(buttonbox)
        self.setLayout(vbox)


class TabContact(QWidget):
    def __init__(self):
        super().__init__()
        nameLabel = QLabel("Name: ")
        nameEdit = QLineEdit()
        phone = QLabel("Phone:")
        phoneedit = QLineEdit()
        addr = QLabel("Address:")
        addredit = QLineEdit()
        email = QLabel("Email:")
        emailedit = QLineEdit()
        vbox = QVBoxLayout()
        vbox.addWidget(nameLabel)
        vbox.addWidget(nameEdit)
        vbox.addWidget(phone)
        vbox.addWidget(phoneedit)
        vbox.addWidget(addr)
        vbox.addWidget(addredit)
        vbox.addWidget(email)
        vbox.addWidget(emailedit)
        self.setLayout(vbox)


class TabPeronsalDetails(QWidget):
    def __init__(self):
        super().__init__()
        groupBox = QGroupBox("Select Your Gender")
        list = ["Male", "Female"]
        combo = QComboBox()
        combo.addItems(list)
        vbox = QVBoxLayout()
        vbox.addWidget(combo)
        groupBox.setLayout(vbox)
        groupBox2 = QGroupBox("Select Your Favorite Programming Language")
        python = QCheckBox("Python")
        cpp = QCheckBox("C++")
        java = QCheckBox("Java")
        csharp = QCheckBox("C#")
        vboxp = QVBoxLayout()
        vboxp.addWidget(python)
        vboxp.addWidget(cpp)
        vboxp.addWidget(java)
        vboxp.addWidget(csharp)
        groupBox2.setLayout(vboxp)
        mainLayout = QVBoxLayout()
        mainLayout.addWidget(groupBox)
        mainLayout.addWidget(groupBox2)
        self.setLayout(mainLayout)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    tabdialog = Tab()
    tabdialog.show()
    app.exec()
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

Wes*_*nio 9

尝试exec_()代替exec()

PySide2 使用它是因为遗留原因(exec过去曾是 Python 中的保留关键字)。