Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 12, 2014 15:37:49

skullhead
Зарегистрирован: 2014-02-12
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

проблем при ипмортировании модуля

Всем привет.Собственно вот код импортируемого модуля.

#-*- coding:utf-8 -*-
from PyQt5 import QtCore, QtGui, QtPrintSupport, QtWidgets

class MyWindow(QtWidgets.QWidget):
def __init__(self,parent=None):
QtWidgets.QWidget.__init__(self,parent)
self.label=QtWidgets.QLabel("Привет, мир!")
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.btnQuit=QtWidgets.QPushButton("&Закрыть окно")
self.vbox=QtWidgets.QVBoxLayout()
self.vbox.addWidget(self.label)
self.vbox.addWidget(self.btnQuit)

self.setLayout(self.vbox)
self.btnQuit.clicked.connect(sys.exit)

if __name__=="__main__":

import sys
app=QtWidgets.QApplication(sys.argv)
window=MyWindow()
window.setWindowTitle("ООП-стиль создания окна")
window.resize(300,70)
window.show()
sys.exit(app.exec_())

Этот модуль срабатывает без ошибок.

Вот основная программа,куда этот модуль импортируется :

#-*- coding:utf-8 -*-
from PyQt5 import QtCore, QtGui, QtPrintSupport, QtWidgets

import MyWindow

class MyDialog(QtWidgets.QDialog):
def __init__(self,parent=None):

QtWidgets.QDialog.__init__(self,parent)
self.myWidget=MyWindow.MyWindow()
self.myWidget.vbox.setMargin(0)
self.button=QtWidgets.QPushbutton("Изменить надпись")
mainBox=QtWidgets.QVBoxLayout()
mainBox.addWidget(self.myWidget)
mainBox.addWidget(self.button)
self.setLayout(mainBox)
self.btnQuit.clicked.connect(sys.exit)

def on_clicked(self):
self.myWidget.label.setText("Новая надпись")
self.button.setDisabled(True)

if __name__=="__main__":

import sys
app=QtWidgets.QApplication(sys.argv)
window=MyDialog()
window.setWindowTitle("Преимущество ООП-стиля")
window.resize(300,100)
window.show()
sys.exit(app.exec_())

И вот такую ошибку он выдает при исполнении:

Traceback (most recent call last):
File "C:\Python33\test1.pyw", line 30, in <module>
window=MyDialog()
File "C:\Python33\test1.pyw", line 11, in __init__
self.myWidget=MyWindow.MyWindow()
File "C:\Python33\MyWindow.py", line 15, in __init__
self.btnQuit.clicked.connect(sys.exit)
NameError: global name 'sys' is not defined

пытаюсь повторить пример из книги Прохоренок “Python и PyQt.Разработка приложений”.
подскажите пожалуйста,в чем ошибка.

Офлайн

#2 Фев. 12, 2014 15:46:36

PanovSergey
От: Екатеринбург
Зарегистрирован: 2013-12-29
Сообщения: 269
Репутация: +  19  -
Профиль   Адрес электронной почты  

проблем при ипмортировании модуля

skullhead
self.btnQuit.clicked.connect(sys.exit)
Вот же не импортирован sys. Вот вас и ругают.
QtWidgets.QDialog.__init__(self,parent)
Лучше так
super(MyWindow, self).__init__(parent)

Отредактировано PanovSergey (Фев. 12, 2014 15:50:32)

Офлайн

#3 Фев. 12, 2014 19:29:35

skullhead
Зарегистрирован: 2014-02-12
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

проблем при ипмортировании модуля

PanovSergey
Вот же не импортирован sys. Вот вас и ругают.
не могли бы вы пояснить,в каком месте я его должен импортировать?и почему сам импортируемый модуль выполняется без ошибок,а аналогичный код в основной программе нет?

Офлайн

#4 Фев. 12, 2014 19:45:55

PanovSergey
От: Екатеринбург
Зарегистрирован: 2013-12-29
Сообщения: 269
Репутация: +  19  -
Профиль   Адрес электронной почты  

проблем при ипмортировании модуля

skullhead
не могли бы вы пояснить,в каком месте я его должен импортировать?и почему сам импортируемый модуль выполняется без ошибок,а аналогичный код в основной программе нет?
Очевидно из за
 if __name__=="__main__":
этот код в импортируемом модуле не выполняется, соответственно не выполняется импорт sys.

Офлайн

#5 Фев. 13, 2014 07:44:09

skullhead
Зарегистрирован: 2014-02-12
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

проблем при ипмортировании модуля

PanovSergey
этот код в импортируемом модуле не выполняется, соответственно не выполняется импорт sys.
Сработало.Спасибо за помощь!)
Почти все..
Что означает вот эта ошибка?

Traceback (most recent call last):
File “C:\Python33\test.pyw”, line 23, in on_clicked
self.myWidget.label.setText(“Новая надпись”)
AttributeError: ‘bool’ object has no attribute ‘myWidget’

Ошибка возникает при обработке нажатия кнопки.

 #-*- coding:utf-8 -*-
from PyQt5 import QtCore, QtGui, QtPrintSupport, QtWidgets
import MyWindow

class MyDialog(QtWidgets.QDialog):

def __init__(self,parent=None):

QtWidgets.QDialog.__init__(self,parent)
self.myWidget=MyWindow.MyWindow()
#self.myWidget.vbox.setMargin(0)
self.button=QtWidgets.QPushButton("Изменить надпись")
mainBox=QtWidgets.QVBoxLayout()
mainBox.addWidget(self.myWidget)
mainBox.addWidget(self.button)
self.setLayout(mainBox)
self.button.clicked.connect(MyDialog.on_clicked)

def on_clicked(self):
self.myWidget.label.setText("Новая надпись")
self.button.setDisabled(True)

if __name__=="__main__":

import sys
app=QtWidgets.QApplication(sys.argv)
window=MyDialog()
window.setWindowTitle("Преимущество ООП-стиля")
window.resize(300,100)
window.show()
sys.exit(app.exec_())

Отредактировано skullhead (Фев. 13, 2014 09:17:40)

Офлайн

#6 Фев. 13, 2014 10:11:32

PanovSergey
От: Екатеринбург
Зарегистрирован: 2013-12-29
Сообщения: 269
Репутация: +  19  -
Профиль   Адрес электронной почты  

проблем при ипмортировании модуля

self.myWidget.label.setText(“Новая надпись”)
AttributeError: ‘bool’ object has no attribute ‘myWidget’
значит что self.myWidget.label это булевое значение и не надо у него просить setText. Вы скорее всего не правильно используете апи.

Офлайн

#7 Фев. 13, 2014 12:06:56

skullhead
Зарегистрирован: 2014-02-12
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

проблем при ипмортировании модуля

PanovSergey
значит что self.myWidget.label это булевое значение и не надо у него просить setText.
я не понимаю,почему оно булевое,ведь по идее это экземпляр класса QLabel создающего надпись.и у этого класса есть метод setText.

Офлайн

#8 Фев. 13, 2014 16:45:12

PanovSergey
От: Екатеринбург
Зарегистрирован: 2013-12-29
Сообщения: 269
Репутация: +  19  -
Профиль   Адрес электронной почты  

проблем при ипмортировании модуля

сорри, здесь self буль и доки сообщают что надо на сигнал повеситься.

Отредактировано PanovSergey (Фев. 13, 2014 16:49:12)

Офлайн

#9 Фев. 13, 2014 17:29:04

skullhead
Зарегистрирован: 2014-02-12
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

проблем при ипмортировании модуля

PanovSergey
надо на сигнал повеситься.
ох сложно мне,совсем начинающему ,такой сленг понимать)

Офлайн

#10 Фев. 13, 2014 17:34:49

PanovSergey
От: Екатеринбург
Зарегистрирован: 2013-12-29
Сообщения: 269
Репутация: +  19  -
Профиль   Адрес электронной почты  

проблем при ипмортировании модуля

У вас код выглядит нормально, но вы где то ошиблись проверьте еще раз доки

 
       self.button.clicked.connect(MyDialog.on_clicked)
         
    def on_clicked(self):
        self.myWidget.label.setText("Новая надпись")
        self.button.setDisabled(True)  

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version