Форум сайта python.su
Всем доброго времени суток. Публикуюсь сюда т.к. решение видимо совсем простое )) В общем содзадим кютдесинджером две формы на которых разные интерфейсы. К примеру на первой форме одна кнопка, а на второй лист виджет. Подскажите как сделать так, чтоб при нажатии на кнопку первой формы открывалась вторая )))) вот наработки
i1.py
from PyQt4 import QtCore, QtGui
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(400, 300)
self.pushButton = QtGui.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(40, 50, 75, 24))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
Form.setWindowTitle(QtGui.QApplication.translate("Form", "Form", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate("Form", "PushButton", None, QtGui.QApplication.UnicodeUTF8))
from PyQt4 import QtCore, QtGui
class Ui_Form2(object):
def setupUi(self, Form):
Form2.setObjectName("Form2")
Form2.setGeometry(QtCore.QRect(0, 0, 400, 300))
self.listView = QtGui.QListView(Form2)
self.listView.setGeometry(QtCore.QRect(70, 30, 256, 192))
self.listView.setObjectName("listView")
# self.retranslateUi2(Form2)
QtCore.QMetaObject.connectSlotsByName(Form2)
def retranslateUi2(self, Form2):
Form2.setWindowTitle(QtGui.QApplication.translate("Form2", "Form2", None, QtGui.QApplication.UnicodeUTF8))
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import i1 as intr, i2 as intr2
class MyForm(QMainWindow, intr.Ui_Form):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.setupUi(self)
self.connect(self.pushButton, SIGNAL("clicked()"), self.sota)
def sota(self):
self.class2 = intr2.Ui_Form2()
#QWidget.__init__(QWidget, None)
self.class2.setupUi(self.class2)
if __name__ == "__main__":
app = QApplication(sys.argv)
myapp = MyForm()
myapp.show()
sys.exit(app.exec_())
Офлайн
Это называется архитектурой.
Неправилен сам подход. У тебя главным объектом приложения является форма (от QWidget), а это плохо согласуется с MVC.
kzoi_pyНе используй никогда.
from PyQt4.QtGui import *
from PyQt4.QtCore import *
Офлайн
подскадите плиз почитать чего рускоязычное по корректному построению архитектуры. Просто самодеятельность приводит к всяким ошибкам ) простые приложения кодил по шаблону главного файла приведённого выше а теперь безсилен (( вот что получилось
import sys
from PyQt4 import QtGui as qg
from PyQt4 import QtCore as qc
import i1 , i2
class MyForm(): #, intr.Ui_Form):
def __init__(self):
f1 = i1.Ui_Form()
qg.QWidget.__init__(self, None)
f1.setupUi(self)
if __name__ == "__main__":
app = qg.QApplication(sys.argv)
myapp = MyForm()
myapp.show()
sys.exit(app.exec_())
Офлайн
MyForm нужно наследовать от QWidget
и зачем импорты с другими именами? 3-4 буквы погоды не сделают а читаемость падает, темболее q и g еще и похожи
from PyQt4 import QtGui
from PyQt4 import QtCore
Офлайн
а так корректно кодить? :)
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
import i1 , i2
class MyForm():
window = 0
window2 = 0
def __init__(self):
f1 = i1.Ui_Form()
self.window = QtGui.QWidget()
f1.setupUi(self.window)
f2 = i2.Ui_Form2()
self.window2 = QtGui.QWidget()
f2.setupUi(self.window2)
QtCore.QObject.connect(f1.pushButton, QtCore.SIGNAL("clicked()"), self.window2.show)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = MyForm()
myapp.window.show()
sys.exit(app.exec_())
Отредактировано (Фев. 5, 2010 09:58:57)
Офлайн
kzoi_pyЯ приходил к этому методом проб и ошибок.
подскадите плиз почитать чего рускоязычное по корректному построению архитектуры. Просто самодеятельность приводит к всяким ошибкам )
kzoi_pyТоже криво. bazooka правильно говорит.
from PyQt4 import QtGui as qg
from PyQt4 import QtCore as qc
Офлайн
Офлайн
from PyQt4.QtGui import *Не вижу в этом ничего плохого. Qt на С++ разрабатывался изначально без пространств имен, и все классы имеют префикс Q, так что вполне нормально и читается и никакие имена не перекроются.
from PyQt4.QtCore import *
Офлайн
ещё случай интересный =) не знаю что и думать
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
import i1 , i2, operator
class MyForm():
dictionary_class = {}
window = 0
window2 = 0
def __init__(self):
f1 = i1.Ui_Form()
self.window = QtGui.QMainWindow()
f1.setupUi(self.window)
self.dictionary_class['window'] = 0
f2 = i2.Ui_Form2()
self.window2 = QtGui.QWidget()
f2.setupUi(self.window2)
self.dictionary_class['window2'] = 0
QtCore.QObject.connect(f1.pushButton, QtCore.SIGNAL("clicked()"), self.window2.show)
self.window.closeEvent = self.wclose1 # take event close
self.window2.showEvent == operator.__setitem__(self.dictionary_class, "window2", 1) #self.wshow
self.window2.closeEvent == operator.__setitem__(self.dictionary_class, "window2", 0) #self.w2close
def wclose1(self, event):
if self.dictionary_class["window2"] > 0:
event.ignore()
else:
event.accept()
# def wshow(self, event):
# self.dictionary_class["window2"] = 1
# def w2close(self,event):
# self.dictionary_class["window2"] = 0
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = MyForm()
operator.setitem(myapp.dictionary_class, "window", 1)
myapp.window.show()
sys.exit(app.exec_())
Отредактировано (Фев. 5, 2010 15:40:00)
Офлайн