На прошлой неделе я начал изучать Python, и я разработал некоторые приложения для командной строки. Теперь я хотел бы разрабатывать приложения с графическим интерфейсом. Я искал в Интернете, и я нашел проект, который соответствует моим потребностям: Qt Project (http://qt-project.org) и PyQt (http://www.riverbankcomputing.com/software/pyqt/intro). Я установил Qt 5.3.2 Open Source, SIP 4.16.4, PyQt5 5.3.2 в Mac OS X 10.10 и python 2.7.6. После некоторых проблем при установке Qt и PyQt, наконец, мне удалось заставить их работать. Если я открываю примеры проектов из папки примера PyQt, gui появляется без каких-либо проблем. Поэтому я создал свой графический интерфейс с Qt Creator, а затем я использовал pyuic5 для генерации кода python. Это то, что pyuic5 создан (имя файла «myapp_auto.py»):Qt Framework, PyQt5 и AttributeError: объект 'MyApp' не имеет атрибута 'myAttribute'
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file '/Users/andrea/Developer/Qt/mainwindow.ui'
#
# Created: Mon Nov 17 14:20:14 2014
# by: PyQt5 UI code generator 5.3.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(400, 300)
self.centralWidget = QtWidgets.QWidget(MainWindow)
self.centralWidget.setObjectName("centralWidget")
self.ok = QtWidgets.QPushButton(self.centralWidget)
self.ok.setGeometry(QtCore.QRect(140, 120, 115, 32))
self.ok.setAccessibleName("")
self.ok.setObjectName("ok")
self.text = QtWidgets.QLabel(self.centralWidget)
self.text.setGeometry(QtCore.QRect(100, 70, 181, 16))
self.text.setAccessibleName("")
self.text.setAlignment(QtCore.Qt.AlignCenter)
self.text.setObjectName("text")
self.time = QtWidgets.QDateTimeEdit(self.centralWidget)
self.time.setGeometry(QtCore.QRect(100, 180, 194, 24))
self.time.setAccessibleName("")
self.time.setObjectName("time")
MainWindow.setCentralWidget(self.centralWidget)
self.menuBar = QtWidgets.QMenuBar(MainWindow)
self.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 22))
self.menuBar.setObjectName("menuBar")
self.menuMyApp = QtWidgets.QMenu(self.menuBar)
self.menuMyApp.setObjectName("menuMyApp")
self.menuEdit = QtWidgets.QMenu(self.menuBar)
self.menuEdit.setObjectName("menuEdit")
MainWindow.setMenuBar(self.menuBar)
self.mainToolBar = QtWidgets.QToolBar(MainWindow)
self.mainToolBar.setObjectName("mainToolBar")
MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
self.statusBar = QtWidgets.QStatusBar(MainWindow)
self.statusBar.setObjectName("statusBar")
MainWindow.setStatusBar(self.statusBar)
self.menuBar.addAction(self.menuMyApp.menuAction())
self.menuBar.addAction(self.menuEdit.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.ok.setText(_translate("MainWindow", "Ok"))
self.text.setText(_translate("MainWindow", "I\'m a GUI"))
self.menuMyApp.setTitle(_translate("MainWindow", "MyApp"))
self.menuEdit.setTitle(_translate("MainWindow", "Edit"))
После этого я добавил новый питон файл, в котором я положил свой код; это то, что я написал (имя файла «myapp.py»):
#!/usr/bin/env python
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from myapp_auto import Ui_MainWindow
import sys
import time
class MyApp(Ui_MainWindow):
parse_triggered = pyqtSignal()
def __init__(self, parent=None, name=None):
Ui_MainWindow.__init__(self)
if __name__ == "__main__":
app = QApplication(sys.argv)
MainWindow = QMainWindow()
ui = MyApp()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Затем я бегу myapp.py и я проверил, что все элементы GUI оказались где они должны быть. Ну ... теперь прийти мой вопрос: Я попытался получить доступ с кодом элемента «время» в MainWindow модификации инициализации DEF таким образом:
def __init__(self, parent=None, name=None):
Ui_MainWindow.__init__(self)
# Set the date to now
now = QDateTime()
now.setTime_t(int(time.time()))
self.time.setDateTime(now)
Но компилятор показывает все дни эту ошибку:
AttributeError: 'MyApp' object has no attribute 'time'
Этот даже если я попытаюсь получить доступ к любому другому элементу («ok», «text»). Будет, конечно, глупая ошибка, но я просто не могу понять, где я ошибся. Спасибо всем, ребята! Иметь хороший день,
Andrea
Отлично, это прекрасно! Это потрясающе, поскольку новички получают советы от экспертов! Спасибо тебе, эхуморо, ты спас мой вечер! –