Найти - Пользователи
Полная версия: QFrame. Привязать сигнал
Начало » GUI » QFrame. Привязать сигнал
1 2 3
MetalHead
Голова кипит, помогите. Практики мало, извиняюсь. Как сделать так чтобы в словарь корректно добавлялся фрейм?
import sys
from PyQt4 import QtGui
class Frame(QtGui.QFrame):
    def __init__(self, parent=None):
        self.p = 0
        i = 48
        QtGui.QFrame.__init__(self, parent)
        self.indicator = []
        self.color = "red"
        while self.p != 8:
            self.indicator.append(self) # как сюда воткнуть этот фрейм?
            self.indicator[self.p].setFixedSize(17, 17)
            self.indicator[self.p].setStyleSheet("QWidget {background: #666;}")
            self.indicator[self.p].move(i, 60)
        
            self.p += 1
            i += 25
            
        def mousePressEvent(self, event):
            if self.color is "red":
                self.indicator[1].setStyleSheet('QWidget {background:green;}')
                self.color = "green"
                print ("JR")
            else:
                self.setStyleSheet('QWidget {background: red;}')
                self.color = "red"
        
class Base(QtGui.QWidget):
    def __init__(self):
        super(Base, self).__init__()
        self.startUW()
    def startUW(self):
        self.fields()
        record = QtGui.QPushButton("Записать", self)
        record.move(100, 18)
        play = QtGui.QPushButton("Проиграть", self)
        play.move(190, 18)
        Frame(self)
        self.setWindowTitle("Indicator Generator v0.1")
        self.setFixedSize(300, 250)
        self.move(300, 250)
        self.show()
    def fields(self):
        p = 0
        i = 10
        self.field = []
        while p != 2:
            self.field.append(QtGui.QLineEdit(self))
            self.field[p].setFixedSize(40, 25)
            self.field[p].move(i, 20)
            p += 1
            i += 45
def main():
    app = QtGui.QApplication(sys.argv)
    gui = Base()
    sys.exit(app.exec())
if __name__ == "__main__":
    main()
vrabey
MetalHead
Как сделать так чтобы в словарь корректно добавлялся фрейм?
не понятно чего ты хочешь
твой код на мой не проффесиональный взгляд ничего не говорит
зачем словарь
цель добавления
опиши задачу
        while self.p != 8:
            self.indicator.append(self) # как сюда воткнуть этот фрейм?
            self.indicator[self.p].setFixedSize(17, 17)
            self.indicator[self.p].setStyleSheet("QWidget {background: #666;}")
            self.indicator[self.p].move(i, 60)
        
            self.p += 1
            i += 25

этот кусок кода не понятен
MetalHead
vrabey
зачем словарь
цель добавления
опиши задачу
Словарь для того, чтобы не создавать QFrame аж 8 раз. Т.e. создает новый элемент в словаре. А остальное сразу для назначения местоположения и стилей.
vrabey
MetalHead
Словарь для того, чтобы не создавать QFrame аж 8 раз. Т.e. создает новый элемент в словаре
не понял
просто опиши чего ты хочешь от окна
1. что видим?
2. что происходит с окном (кнопкой, фреймом) когда кликаем?
MetalHead
Вот, смотрите скрин.
vrabey
MetalHead
sys.exit(app.exec())
здесь ошибка синтаксиса,

а с картинкой сейчас разберёмся
MetalHead
vrabey
У вас аська есть?
vrabey
MetalHead
У вас аська есть
skype
vrabey
import sys
from PyQt4 import QtGui
class Frame(QtGui.QFrame):
    def __init__(self, parent=None):
        """
        здесь просто описываем макет фрейма
        свойства и методы
        :param parent:
        """
        QtGui.QFrame.__init__(self, parent)
        self.x = 17
        self.y = 17
        self.color = "red"
        self.setStyleSheet('background: {0};'.format(self.color))
        self.setFrameShape(QtGui.QFrame.Box)
        self.setFixedSize(self.x, self.y)
    def mousePressEvent(self, event):
        if self.color is "red":
            self.setStyleSheet('QWidget {background:green;}')
            self.color = "green"
            print ("JR")
        else:
            self.setStyleSheet('QWidget {background: red;}')
            self.color = "red"
class Base(QtGui.QWidget):
    def __init__(self):
        super(Base, self).__init__()
        self.startUW()
        self.fields()
    def startUW(self):
        record = QtGui.QPushButton(u"Записать", self)
        record.move(100, 18)
        play = QtGui.QPushButton(u"Проиграть", self)
        play.move(190, 18)
        self.setWindowTitle("Indicator Generator v0.1")
        self.setFixedSize(300, 250)
        self.move(300, 250)
        self.add_frames()
        # c 55 по 62 строку закоментировать после прочтения
        # написал так что бы было понятнее
        # а здесь создаём экземпляр класса
        self.frame_1 = Frame(self)
        # как то его размещаем
        self.frame_1.move(48, 60)
        # ещё  экземпляр
        self.frame_1 = Frame(self)
        # и как то его размещаем
        self.frame_1.move(48 + 25, 60)
    def add_frames(self, count=8):
        distance = 25
        start_x = 48
        y = 60
        for i in range(count):
            self.frame_1 = Frame(self)
            self.frame_1.move(start_x, y)
            start_x += distance
    def fields(self):
        i = 10
        self.field = []
        for name in range(2):
            self.field.append(QtGui.QLineEdit(self))
            self.field[name].setFixedSize(40, 25)
            self.field[name].move(i, 20)
            i += 45
def main():
    app = QtGui.QApplication(sys.argv)
    gui = Base()
    gui.show()
    sys.exit(app.exec_())
if __name__ == "__main__":
    main()


! абсолютное позиционироание не удобно и сложно и здесь безсмысленно
и зачем здесь именно фрейм не понял - если из за рамки , то её к любому виджету привязать можно
MetalHead
vrabey
skype
Тоже сойдет. Дайте пожалуйста.
Спасибо, буду разбираться.
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