Контакты

Наибольший вклад в теги

Все теги (5)

Лучшие ответы пользователя

Все ответы (7)
  • PyQt 5: условие с QLabel.setText() не меняет значение на форме, как исправить?

    phoenixbk
    @phoenixbk
    Здравствуйте!
    А где "groupBox" добавляется в окно? Сделал простенький вариант с классном на основе QWidget. Всё отображается как надо.
    import sys
    from PyQt5.QtWidgets import QApplication, QWidget, QGroupBox, QVBoxLayout, QLabel, QPushButton
    
    class Example(QWidget):
        def __init__(self):
            super().__init__()
            l = QVBoxLayout()
            b = QPushButton('Добавить без параметра!')
            b.clicked.connect(lambda: self.function1())
            b2 = QPushButton('Добавить с параметром!')
            b2.clicked.connect(lambda: self.function1(args='параметр'))
            l.addWidget(b)
            l.addWidget(b2)
            self.setLayout(l)
            self.show()
    
        def function1(self, args=None):
            groupBox = QGroupBox("Титле")
            vbox = QVBoxLayout()
            vbox.addStretch(1)
            groupBox.setLayout(vbox)
    
            integerLabel = QLabel('test')
            vbox.addWidget(integerLabel)
            print('свойство сейчас:' + integerLabel.text())
            if args is not None:
                integerLabel.setText('1')
                print('Тест попадения функции')
                print('Поменялось на:' + args)
            print('свойство сейчас 2:' + integerLabel.text())
            self.layout().addWidget(groupBox)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        w = Example()
        w.resize(250, 150)
        w.setWindowTitle('Simple')
        w.show()
        sys.exit(app.exec_())
    Ответ написан
  • Когда делать ORM mapping?

    phoenixbk
    @phoenixbk
    В своем приложении вы описываете объекты хранения в виде ООП классов. Далее, при работе с этими объектами в Python, система ORM транслирует объектные взаимодействия в SQL в соответствии с указанным провайдером.
    Например, print(Person[person_id].name) сгенерирует следующий SQL код для SQLite:
    SELECT "id", "name", "age"
    FROM "Person"
    WHERE "id" = ?

    Где вместо вопроса подставит указанный person_id. Он выполнится в SQLite, вернет данные в ORM и она уже выдаст нам запрошенные данные в виде объекта Person, из которого в данном случае мы выводим имя.
    И это будет работать так независимо от того, первый раз вы запускаете приложение или сотый.
    На официальной странице Pony ORM все довольно понятно расписано в разделе первые шаги:
    Getting Started with Pony
    Для понимания взаимодействия ORM с базой данных советую включить отладочный режим: set_sql_debug(True). В это случае в консоль будет выводиться все взаимодействие с БД.
    Ответ написан
  • Как создать фильтрацию в привязанной коллекции в WPF?

    phoenixbk
    @phoenixbk
    Есть ещё вариант использовать CollectionViewSource:
    CollectionViewSource _viewSource = new CollectionViewSource();
    _viewSource.Source = _items;
    _viewSource.Filter += (s, e) =>
                  {
                      SomeItem item = e.Item as SomeItem;
                      bool accepted;
                      //проверяем наши условия. true - объект отобразится, false - не отобразится
                      e.Accepted = accepted;
                  };

    Чтобы обновить список элементов используем:
    _viewSource.View.Refresh();
    После этого для каждого элемента из _items вызовется событие Filter.
    Соответственно в ComboBox.ItemsSource биндим _viewSource.View. Таким образом в ComboBox не придется каждый раз вручную вставлять новую коллекцию.
    Ответ написан