QApplication'未定义

 霞霞123321 发布于 2023-02-13 21:40

我从http://www.pythoncentral.io/pyside-pyqt-tutorial-interactive-widgets-and-layout-containers/下载了以下脚本. 我收到以下错误消息:NameError:name'QApplication'未定义

我添加了脚本的前两行.这没有用.我想也许我一定不能安装qt.但是当我试图运行PyQt4-4.10.3-gpl-Py2.7-Qt4.8.5-x32.exe时,程序告诉我它已经安装好了.

有没有人有什么建议?

# copied from http://www.pythoncentral.io/pyside-pyqt-tutorial-interactive-widgets-and-layout-containers/
# Every Qt application must have one and only one QApplication object;
# it receives the command line arguments passed to the script, as they
# can be used to customize the application's appearance and behavior

import sys
from PyQt4 import QtGui, QtCore
#import PyQt4.QtGui, PyQt4.QtCore
qt_app = QApplication(sys.argv)

class AbsolutePositioningExample(QWidget):
    ''' An example of PySide absolute positioning; the main window
        inherits from QWidget, a convenient widget for an empty window. '''
    def __init__(self):
        # Initialize the object as a QWidget
        QWidget.__init__(self)

        # We have to set the size of the main window
        # ourselves, since we control the entire layout
        self.setMinimumSize(400, 185)
        self.setWindowTitle('Dynamic Greeter')

        # Create the controls with this object as their parent and set
        # their position individually; each row is a label followed by
        # another control

        # Label for the salutation chooser
        self.salutation_lbl = QLabel('Salutation:', self)
        self.salutation_lbl.move(5, 5) # offset the first control 5px
                                       # from top and left
        self.salutations = ['Ahoy',
                            'Good day',
                            'Hello',
                            'Heyo',
                            'Hi',
                            'Salutations',
                            'Wassup',
                            'Yo']
        # Create and fill the combo box to choose the salutation
        self.salutation = QComboBox(self)
        self.salutation.addItems(self.salutations)

        # Allow 100px for the label and 5px each for borders at the
        # far left, between the label and the combobox, and at the far
        # right
        self.salutation.setMinimumWidth(285)
        # Place it five pixels to the right of the end of the label
        self.salutation.move(110, 5)

        # The label for the recipient control
        self.recipient_lbl = QLabel('Recipient:', self)
        # 5 pixel indent, 25 pixels lower than last pair of widgets
        self.recipient_lbl.move(5, 30)

        # The recipient control is an entry textbox
        self.recipient = QLineEdit(self)
        # Add some ghost text to indicate what sort of thing to enter
        self.recipient.setPlaceholderText(""e.g. 'world' or 'Matey'"")
        # Same width as the salutation
        self.recipient.setMinimumWidth(285)
        # Same indent as salutation but 25 pixels lower
        self.recipient.move(110, 30)

        # The label for the greeting widget
        self.greeting_lbl = QLabel('Greeting:', self)
        # Same indent as the others, but 45 pixels lower so it has
        # physical separation, indicating difference of function
        self.greeting_lbl.move(5, 75)

        # The greeting widget is also a label
        self.greeting = QLabel('', self)
        # Same indent as the other controls
        self.greeting.move(110, 75)

        # The build button is a push button
        self.build_button = QPushButton('&Build Greeting', self)

        # Place it at the bottom right, narrower than
        # the other interactive widgets
        self.build_button.setMinimumWidth(145)
        self.build_button.move(250, 150)

    def run(self):
        # Show the form
        self.show()
        # Run the Qt application
        qt_app.exec_()

# Create an instance of the application window and run it
app = AbsolutePositioningExample()
app.run()

abarnert.. 5

如果你按顺序阅读教程,你会发现系列中的前一篇文章展示了你需要在每个片段的开头部分使它成为可运行程序的东西.作者显然是这样做的,因此相同的代码可以与PyQt和PySide一起使用.

所以,如果你使用PyQt4,你需要添加:

# Allow access to command-line arguments
import sys

# SIP allows us to select the API we wish to use
import sip

# use the more modern PyQt API (not enabled by default in Python 2.x);
# must precede importing any module that provides the API specified
sip.setapi('QDate', 2)
sip.setapi('QDateTime', 2)
sip.setapi('QString', 2)
sip.setapi('QTextStream', 2)
sip.setapi('QTime', 2)
sip.setapi('QUrl', 2)
sip.setapi('QVariant', 2)

# Import all of Qt
from PyQt4.Qt import *

如果PySide:

# Allow access to command-line arguments
import sys

# Import the core and GUI elements of Qt
from PySide.QtCore import *
from PySide.QtGui import *

在显示您的此样板的框下方,有一个很好的,可读的解释,说明它的含义以及为什么需要这样做.

但是,我建议如果你想从一个教程中学习,你就从一开始就开始工作,而不是从中间开始,试图弄清楚你错过了什么.


如果您只是执行from PyQt4 import QtGui, QtCore而不是*从它们导入,则这些模块中的名称可用,但仅作为限定名称.也就是说QApplication,你必须写,而不是QtCore.QApplication.

如果您不理解其中的差异,请阅读官方Python教程中的模块或类似内容,以了解导入的工作原理.

1 个回答
  • 如果你按顺序阅读教程,你会发现系列中的前一篇文章展示了你需要在每个片段的开头部分使它成为可运行程序的东西.作者显然是这样做的,因此相同的代码可以与PyQt和PySide一起使用.

    所以,如果你使用PyQt4,你需要添加:

    # Allow access to command-line arguments
    import sys
    
    # SIP allows us to select the API we wish to use
    import sip
    
    # use the more modern PyQt API (not enabled by default in Python 2.x);
    # must precede importing any module that provides the API specified
    sip.setapi('QDate', 2)
    sip.setapi('QDateTime', 2)
    sip.setapi('QString', 2)
    sip.setapi('QTextStream', 2)
    sip.setapi('QTime', 2)
    sip.setapi('QUrl', 2)
    sip.setapi('QVariant', 2)
    
    # Import all of Qt
    from PyQt4.Qt import *
    

    如果PySide:

    # Allow access to command-line arguments
    import sys
    
    # Import the core and GUI elements of Qt
    from PySide.QtCore import *
    from PySide.QtGui import *
    

    在显示您的此样板的框下方,有一个很好的,可读的解释,说明它的含义以及为什么需要这样做.

    但是,我建议如果你想从一个教程中学习,你就从一开始就开始工作,而不是从中间开始,试图弄清楚你错过了什么.


    如果您只是执行from PyQt4 import QtGui, QtCore而不是*从它们导入,则这些模块中的名称可用,但仅作为限定名称.也就是说QApplication,你必须写,而不是QtCore.QApplication.

    如果您不理解其中的差异,请阅读官方Python教程中的模块或类似内容,以了解导入的工作原理.

    2023-02-13 21:46 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有