Qt designer: пользовательский код для пользовательских действий - PullRequest
2 голосов
/ 25 июля 2011

Я осматривался и ничего не нашел, кроме старого документа для Qt3 с версией 3.x qt designer.

Я оставлю пример, не то, что я не могу дать код, поскольку мой проект GPL, но для простоты.

Пример: Вы разрабатываете графический интерфейс для своего приложения. Вы вставляете некоторые кнопки в GUI, и вы хотите, чтобы эти кнопки выполняли что-то с логикой, которая возможно уже написана.

Вопрос: Как добавить или установить этот код таким образом, чтобы кнопка, когда она отмечена, запускала этот код?

Я не хочу связывать виджеты с сигналами / слотами. Мой подход состоял в том, чтобы создать настраиваемое действие в редакторе действий и подключить нужную кнопку к этому действию, надеясь найти способ написать код для этого действия. Я мог бы определить его имя, его значок (?) И так далее. Но мне нужно написать свою логику / код.

Я прочитал некоторую документацию , которая инструктирует вас создать файл заголовка C ++, но он кажется устаревшим для новой версии Qt Designer (4.7.3). Другой обширный ресурс, который я нашел по моему вопросу, это все о связывании сигналов между стандартными действиями objetc. Повторяю, это не то, что мне нужно / нужно.

Мой вопрос возник из-за того, что я не хочу редактировать сгенерированный .py. Я чувствую, что это ДОЛЖЕН быть способ установить файл (пользовательский код, файл заголовка и т. Д.) С кодом пользовательского действия, но, честно говоря, я пока ничего не могу найти.

В случае отрицательного ответа (то есть «это невозможно сделать»), было бы неплохо услышать несколько советов по «взлому» кода. Я действительно не люблю модифицировать сгенерированный .py, и кажется уродливым делать что-то вроде: ui.callback в моем коде.

С уважением,

1 Ответ

7 голосов
/ 25 июля 2011

Вам не нужно создавать заголовочный файл или изменять сгенерированный файл pyuic.Предполагая, что ваш объект действия называется myaction, и вы хотите сообщить myaction_slot, когда он будет переключен:

import sys
from PyQt4 import QtCore, QtGui

# import pyuic generated user interface file
from ui_mainwindow import Ui_MainWindow

class MyMainWindow(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MyMainWindow, self).__init__(parent)
        self.setupUi(self)
        # connect myaction_logic to myaction.toggled signal
        self.myaction.toggled.connect(self.myaction_slot)

    def myaction_slot(self):
        pass # do something here

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = MyMainWindow()
    myapp.show()
    sys.exit(app.exec_())
...