Найти - Пользователи
Полная версия: Удаление widget в PyQT
Начало » GUI » Удаление widget в PyQT
1
zazaza
Прошу прощения, за такой глупый вопрос, и еще более глупое объяснение.
Как сделать так, что бы можно было скрыть\удалить widget не из класса с графической оболочкой, а из другого класса.
Т.е. если, например, есть класс A, а в нем есть функция X и если в функции X счетчик досчитал до 100, то widget из класса M, пропал бы..
Спасибо!
pasaranax
Не понял, что тебе мешает удалить/скрыть виджет откуда угодно. Все от архитектуры зависит. Может ты какие-то сложности себе понаписал? Покажи код.
zazaza
У меня сейчас вот так…
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…
pasaranax
Гы, ни строчки разумного кода :) Вот самые откровенные косяки:
1. Первое и самое главное - называй объекты понятными именами, по которым можно понять что это такое. Конечно, если это не микропример из 5 строк.
2. Похоже, ты скопировал строчки из сгенерированного утилитой pyuic файла? Не делай так, просто инклудь его и наследуй свой класс от сгенерированного. Короче, нагугли туториалы по pyqt, а то ты совсем не шаришь.
3.
        M().widget.hide()
M().widget_2.show()
Этими строчками ты создаешь новые объекты класса M, которые уничтожаются сразу по завершении метода X. Если уж очень хочется эксплуатировать родительский класс из дочернего, то передавай ссылку на него туда, но это не круто и чревато сложно распутываемыми узлами. А то, что у тебя реализует класс A можно сделать с помощью QTimer.
4. Класс M - object?
zazaza
Естественно эту штука не работает…
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