Найти - Пользователи
Полная версия: проблем при ипмортировании модуля
Начало » Python для новичков » проблем при ипмортировании модуля
1 2
skullhead
Всем привет.Собственно вот код импортируемого модуля.
#-*- 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.Разработка приложений”.
подскажите пожалуйста,в чем ошибка.
PanovSergey
skullhead
self.btnQuit.clicked.connect(sys.exit)
Вот же не импортирован sys. Вот вас и ругают.
QtWidgets.QDialog.__init__(self,parent)
Лучше так
super(MyWindow, self).__init__(parent)
skullhead
PanovSergey
Вот же не импортирован sys. Вот вас и ругают.
не могли бы вы пояснить,в каком месте я его должен импортировать?и почему сам импортируемый модуль выполняется без ошибок,а аналогичный код в основной программе нет?
PanovSergey
skullhead
не могли бы вы пояснить,в каком месте я его должен импортировать?и почему сам импортируемый модуль выполняется без ошибок,а аналогичный код в основной программе нет?
Очевидно из за
 if __name__=="__main__":
этот код в импортируемом модуле не выполняется, соответственно не выполняется импорт sys.
skullhead
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_())
PanovSergey
self.myWidget.label.setText(“Новая надпись”)
AttributeError: ‘bool’ object has no attribute ‘myWidget’
значит что self.myWidget.label это булевое значение и не надо у него просить setText. Вы скорее всего не правильно используете апи.
skullhead
PanovSergey
значит что self.myWidget.label это булевое значение и не надо у него просить setText.
я не понимаю,почему оно булевое,ведь по идее это экземпляр класса QLabel создающего надпись.и у этого класса есть метод setText.
PanovSergey
сорри, здесь self буль и доки сообщают что надо на сигнал повеситься.
skullhead
PanovSergey
надо на сигнал повеситься.
ох сложно мне,совсем начинающему ,такой сленг понимать)
PanovSergey
У вас код выглядит нормально, но вы где то ошиблись проверьте еще раз доки
 
       self.button.clicked.connect(MyDialog.on_clicked)
         
    def on_clicked(self):
        self.myWidget.label.setText("Новая надпись")
        self.button.setDisabled(True)  
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB