Форум сайта python.su
Здравствуйте, прошу помощи разобраться с проблемой. Имеется такой тестовый код:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
class Ui_Form2(object):
def __init__(self, Form):
self.button1 = QtGui.QPushButton("Does not work :(", Form)
self.button1.setMinimumSize(QtCore.QSize(150, 70))
self.button1.clicked.connect(self.click)
def click(self):
print "da"
class Ui_Form1(object):
def __init__(self, Form):
self.button1 = QtGui.QPushButton("Click me!", Form)
self.button1.setMinimumSize(QtCore.QSize(150, 70))
self.button1.clicked.connect(self.click)
def click(self):
self.Form2 = QtGui.QWidget()
ui = Ui_Form2(self.Form2)
self.Form2.show()
def main():
app = QtGui.QApplication(sys.argv)
win = QtGui.QWidget()
ui = Ui_Form1(win)
win.show()
app.exec_()
return 1
if __name__ == "__main__":
main()
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
class Ui_Form2(object):
def __init__(self, Form):
class PushButton(QtGui.QPushButton):
def __init__(self, hz, name, parent = None):
super(PushButton, self).__init__(parent)
self.whatIsThis = hz
self.button1 = PushButton(self, "Does not work :(", Form)
self.button1.setMinimumSize(QtCore.QSize(150, 70))
self.button1.clicked.connect(self.click)
def click(self):
print "da"
class Ui_Form1(object):
def __init__(self, Form):
self.button1 = QtGui.QPushButton("Click me!", Form)
self.button1.setMinimumSize(QtCore.QSize(150, 70))
self.button1.clicked.connect(self.click)
def click(self):
self.Form2 = QtGui.QWidget()
ui = Ui_Form2(self.Form2)
self.Form2.show()
def main():
app = QtGui.QApplication(sys.argv)
win = QtGui.QWidget()
ui = Ui_Form1(win)
win.show()
app.exec_()
return 1
if __name__ == "__main__":
main()
Офлайн
import sys from PyQt4 import QtCore, QtGui class Window(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) def __call__(self): self.button1 = QtGui.QPushButton(u"Пробуй", self) self.button1.setMinimumSize(QtCore.QSize(150, 70)) self.button1.clicked.connect(self.on_click) self.show() def on_click(self): print u'Все пучком' class MainWindow(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.resize(200, 150) button = QtGui.QPushButton(u'Нажми меня', self) self.connect(button, QtCore.SIGNAL("clicked()"), Window()) app = QtGui.QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_())
Отредактировано young_programmer (Авг. 23, 2013 18:52:19)
Офлайн
что б кто нибудь в двух словах объяснил почему код из вопроса не работает?
я так понимаю код в дизайнере генерится?
Офлайн
vrabeyЯ не увидел явных ошибок в коде, все таки пока ещё новичок. Его код сильно глаз резал, по этому написал сам с тем же функционалом. Лучше же у человека будет рабочий код, чем совсем ни кто не откликнится.
что б кто нибудь в двух словах объяснил почему код из вопроса не работает?
Отредактировано young_programmer (Авг. 23, 2013 20:41:03)
Офлайн
young_programmerс этим я полность согласен , просто для саморазвития иногда лучше знать почему не работает чем почему работает.
Лучше же у человека будет рабочий код, чем совсем ни кто не откликнится
Офлайн
young_programmerСпасибо, но все же присоединяюсь к vrabey, чтобы кто-нибудь пояснил почему мой пример не работает.
Вот, проверяй, все работает.
vrabeyНет, я сам писал.
я так понимаю код в дизайнере генерится?
young_programmerС чего вы это взяли? Если бы мне не нужна была помощь, я бы не обратился сюда. Я как то раз уже сталкивался с этой проблемой, но воспользовался костыльным методом. А столкнувшись второй раз понял, что нужно прояснить ситуацию, дабы дальше не идти этой кривой дорожкой. Да и в новом проекте слишком часто пришлось бы использовать мой костыль, а это сильно портит код, что аж самому не приятно.
Jah кстати ни кому, ни чего так и не ответил кстати, вообще не похоже, чтобы ему нужна была помощь
Офлайн
vrabeyЯ с этим согласен, самому стало интересно почему не работает. На первый взгляд все логично. Дьявол как говорится кроется в мелочах.
с этим я полность согласен , просто для саморазвития иногда лучше знать почему не работает чем почему работает.
Офлайн
Jah
просто не встречал примеров где бы класс отображающий основное окно наследовался от object
обычно наследуется класс из модуля QtGui
просто где то рядо ответ почему не работает твой код
цитата отсюда:
http://forum.vingrad.ru/forum/topic-159421/kw-pyqt.html
"Все классы Qt являются наследниками класса QObject. Класс QObject в PyQt имеет метод connect, который и осуществляет соединение сигнал-слот или сигнал-сигнал. Также класс QObject имеет метод emit, генерирующий сигнал от объекта данного класса."
в общем как то это свясано
Офлайн
vrabeyДа я уже догадался, что причина в наследовании, уже переписываю код как в примере товарища young_programmer. Вопрос лишь в том, почему класс Ui_Form1 работает, а Ui_Form2 нет, ведь они практически идентичные!
Jahпросто не встречал примеров где бы класс отображающий основное окно наследовался от objectобычно наследуется класс из модуля QtGui просто где то рядо ответ почему не работает твой кодцитата отсюда:http://forum.vingrad.ru/forum/topic-159421/kw-pyqt.html“Все классы Qt являются наследниками класса QObject. Класс QObject в PyQt имеет метод connect, который и осуществляет соединение сигнал-слот или сигнал-сигнал. Также класс QObject имеет метод emit, генерирующий сигнал от объекта данного класса.”в общем как то это свясано
Офлайн
JahВот меня тоже именно это и вводит в ступор.
Вопрос лишь в том, почему класс Ui_Form1 работает, а Ui_Form2 нет, ведь они практически идентичные!
Офлайн