Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 15, 2010 17:12:57

zazaza
От:
Зарегистрирован: 2010-04-15
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление widget в PyQT

Прошу прощения, за такой глупый вопрос, и еще более глупое объяснение.
Как сделать так, что бы можно было скрыть\удалить widget не из класса с графической оболочкой, а из другого класса.
Т.е. если, например, есть класс A, а в нем есть функция X и если в функции X счетчик досчитал до 100, то widget из класса M, пропал бы..
Спасибо!



Офлайн

#2 Апрель 15, 2010 17:55:01

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление widget в PyQT

Не понял, что тебе мешает удалить/скрыть виджет откуда угодно. Все от архитектуры зависит. Может ты какие-то сложности себе понаписал? Покажи код.



Офлайн

#3 Апрель 15, 2010 20:32:05

zazaza
От:
Зарегистрирован: 2010-04-15
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление widget в PyQT

У меня сейчас вот так…

from PyQt4 import QtCore, QtGui

class A(object):
def X(self,n):
for i in range(n):
pass
M().widget.hide()
M().widget_2.show()


class M(object):

def s1(self):
A().X(1000)

def s2(self):
self.widget_2.hide()
self.widget.show()

def setupUi(self, mainWindow):
mainWindow.setObjectName("mainWindow")
mainWindow.setEnabled(True)
mainWindow.resize(300, 300)
mainWindow.setMinimumSize(QtCore.QSize(300, 300))
mainWindow.setMaximumSize(QtCore.QSize(300, 300))
mainWindow.setBaseSize(QtCore.QSize(300, 300))
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("ico.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
mainWindow.setWindowIcon(icon)
self.centralwidget = QtGui.QWidget(mainWindow)
self.centralwidget.setObjectName("centralwidget")
self.widget = QtGui.QWidget(self.centralwidget)
self.widget.setGeometry(QtCore.QRect(0, 0, 300, 300))
self.widget.setObjectName("widget")
self.pushButton = QtGui.QPushButton(self.widget)
self.pushButton.setGeometry(QtCore.QRect(100, 100, 100, 30))
self.pushButton.setObjectName("pushButton")
self.widget_2 = QtGui.QWidget(self.centralwidget)
self.widget_2.setGeometry(QtCore.QRect(0, 0, 300, 300))
self.widget_2.setObjectName("widget")
self.pushButton_2 = QtGui.QPushButton(self.widget_2)
self.pushButton_2.setGeometry(QtCore.QRect(100, 150, 100, 30))
self.pushButton_2.setObjectName("pushButton_2")
mainWindow.setCentralWidget(self.centralwidget)
self.widget_2.hide()

self.retranslateUi(mainWindow)

QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("pressed()"), self.s1)
QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL("pressed()"), self.s2)


def retranslateUi(self, mainWindow):
self.pushButton.setText(QtGui.QApplication.translate("mainWindow", "1", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton_2.setText(QtGui.QApplication.translate("mainWindow", "2", None, QtGui.QApplication.UnicodeUTF8))


if __name__ == "__main__":
import sys

app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = M()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Естественно эту штука не работает…
Говорит что: AttributeError: type object ‘M’ has no attribute ‘widget’
а вот хотелось бы именно именно скрывать widget из функции X…



Офлайн

#4 Апрель 15, 2010 21:08:57

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление widget в PyQT

Гы, ни строчки разумного кода :) Вот самые откровенные косяки:
1. Первое и самое главное - называй объекты понятными именами, по которым можно понять что это такое. Конечно, если это не микропример из 5 строк.
2. Похоже, ты скопировал строчки из сгенерированного утилитой pyuic файла? Не делай так, просто инклудь его и наследуй свой класс от сгенерированного. Короче, нагугли туториалы по pyqt, а то ты совсем не шаришь.
3.

        M().widget.hide()
M().widget_2.show()
Этими строчками ты создаешь новые объекты класса M, которые уничтожаются сразу по завершении метода X. Если уж очень хочется эксплуатировать родительский класс из дочернего, то передавай ссылку на него туда, но это не круто и чревато сложно распутываемыми узлами. А то, что у тебя реализует класс A можно сделать с помощью QTimer.
4. Класс M - object?
zazaza
Естественно эту штука не работает…



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version