squ1b3r
Фев. 28, 2010 12:55:52
День добрый всем.
Помогите пожалуйста с такой вот проблемой. Нужно при нажатии на кнопку создавать объект типа QLCDNumber, объектов может быть много, в дальнейшем при выделении QLCDNUmber или как-то еще делать выборку по созданным объектам и вытаскивать имя выделенного объекта для дальнейшей работы, вопрос:
1. Каким образом создавать объекты QLCDNumber, не значая из изначального количества?
2. Каким образом выделить нужный QLCDNumber на форме?
3. Каким образом выбрать соответсвующий объект из созданных?
Не так давно начал разбираться и вот попал в тупик, никак не могу осилить, нагуглить ничего не смог. Заранее спасибо.
pasaranax
Фев. 28, 2010 15:03:29
Ну надо просто сделать список QLCDNumber-ов и оперировать элементами. Главное не забыть, что чтобы удалить виджет, надо не просто удалить объект, а еще перед этим задать ему .setParent(None) (или как-то так). Тема поднималась тут пару раз.
Выделить нужный виджет можно либо по простому - поставить рядом с ним чекбокс или кнопку какую-нибудь и хранить их кортежем в том самом списке, либо круче - сделать свой QLCDNumber, который будет реагировать на клик и слать сигнал со своими реквизитами, при этом можно сделать, чтобы он выделялся цветом для наглядности.
squ1b3r
Фев. 28, 2010 15:09:56
Про список я и сам догодался, я просто не могу понять как это увязать вместе. Нажал я на кнопку создался QLCDNumber, нажал еще 5 раз, создалось еще 5 штук, а потом мне нужет допустим элемент на который я тыкнул и выделил, причем порядкого номера его я не знаю. Как быть в этом случае.
Про свой QLCDNumber спасибо, интересная мысль
pasaranax
Фев. 28, 2010 18:42:00
Вот с помощью .childAt() получилось выбрать нужный виджет, даже без списка.
# -*- coding: utf-8 -*-
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class Window(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.lay = QVBoxLayout(self)
self.delButton = QPushButton("Delete Selected", self)
self.addButton = QPushButton("Add", self)
self.lay.addWidget(self.addButton)
self.lay.addWidget(self.delButton)
self.selected = None
self.addButton.clicked.connect(self.addLCD)
self.delButton.clicked.connect(self.delLCD)
def mousePressEvent(self, event):
self.selected = self.childAt(event.pos())
def addLCD(self):
self.lay.addWidget(QLCDNumber(self))
def delLCD(self):
if type(self.selected) == QLCDNumber:
self.selected.setParent(None)
self.selected = None
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
app.exec_()
squ1b3r
Фев. 28, 2010 20:48:03
Огромное вам спасибо. Именно то, что надо. Осталось только разобраться как выделить это дело и почему-то после удаления LCD форма не меняет свой размер обратно ( Подскажите если не трудно.
pasaranax
Фев. 28, 2010 21:25:59
В delLCD() вызывай self.adjustSize()
squ1b3r
Фев. 28, 2010 21:29:42
И еще раз спасибо. :) Спрошу еще тогда то кучи. приложения написанные на qt4 в гноме выглядят как родные по дефолту, но есть проиложния которые выглядят как в КДЕ. Как такого добиться?