Форум сайта python.su
0
Всем привет.Собственно вот код импортируемого модуля.
#-*- 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
Офлайн
19
skullheadВот же не импортирован sys. Вот вас и ругают.self.btnQuit.clicked.connect(sys.exit)
QtWidgets.QDialog.__init__(self,parent)Лучше так
super(MyWindow, self).__init__(parent)
Отредактировано PanovSergey (Фев. 12, 2014 15:50:32)
Офлайн
0
PanovSergeyне могли бы вы пояснить,в каком месте я его должен импортировать?и почему сам импортируемый модуль выполняется без ошибок,а аналогичный код в основной программе нет?
Вот же не импортирован sys. Вот вас и ругают.
Офлайн
19
skullheadОчевидно из за
не могли бы вы пояснить,в каком месте я его должен импортировать?и почему сам импортируемый модуль выполняется без ошибок,а аналогичный код в основной программе нет?
if __name__=="__main__":
Офлайн
0
PanovSergeyСработало.Спасибо за помощь!)
этот код в импортируемом модуле не выполняется, соответственно не выполняется импорт sys.
#-*- 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)
Офлайн
19
self.myWidget.label.setText(“Новая надпись”)значит что self.myWidget.label это булевое значение и не надо у него просить setText. Вы скорее всего не правильно используете апи.
AttributeError: ‘bool’ object has no attribute ‘myWidget’
Офлайн
0
PanovSergeyя не понимаю,почему оно булевое,ведь по идее это экземпляр класса QLabel создающего надпись.и у этого класса есть метод setText.
значит что self.myWidget.label это булевое значение и не надо у него просить setText.
Офлайн
19
сорри, здесь self буль и доки сообщают что надо на сигнал повеситься.
Отредактировано PanovSergey (Фев. 13, 2014 16:49:12)
Офлайн
0
PanovSergeyох сложно мне,совсем начинающему ,такой сленг понимать)
надо на сигнал повеситься.
Офлайн
19
У вас код выглядит нормально, но вы где то ошиблись проверьте еще раз доки
self.button.clicked.connect(MyDialog.on_clicked) def on_clicked(self): self.myWidget.label.setText("Новая надпись") self.button.setDisabled(True)
Офлайн