2014-11-17 1 views
2

На прошлой неделе я начал изучать 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

ответ

3

Вы не за горами.

Класс MyApp должен наследовать QMainWindow, и вам не нужно использовать модуль time. Попробуйте что-то вроде этого:

class MyApp(QMainWindow, Ui_MainWindow): 
    parse_triggered = pyqtSignal() 

    def __init__(self, parent=None, name=None): 
     super(MyApp, self).__init__(parent) 
     self.setupUi(self) 
     # Set the date to now 
     self.time.setDateTime(QDateTime.currentDateTime()) 

if __name__ == "__main__": 

    app = QApplication(sys.argv) 
    window = MyApp() 
    window.show() 
    sys.exit(app.exec_()) 
+0

Отлично, это прекрасно! Это потрясающе, поскольку новички получают советы от экспертов! Спасибо тебе, эхуморо, ты спас мой вечер! –

Смежные вопросы