применение функций Python непосредственно к Qt designer в качестве сигналов - PullRequest
9 голосов
/ 25 декабря 2011

Я новичок в программировании на Qt и GUI в целом, но я немного потрудился в написании модулей на Python и так далее.Мне нужно разработать простые графические интерфейсы для некоторых из моих старых модулей.

То, что я пытаюсь сделать, можно представить на следующем простом примере:

def f(x, y):
    z = x + y
    return z

Для этой функции я дам двастрочные правки для x и y и один для z.Теперь я создаю кнопку «Рассчитать», и когда я делаю это, я хочу, чтобы она взяла x и y из строковых редакторов, запустила функцию f(x,y) и передала результат в z.способ сделать это непосредственно в Qt Designer, добавив функцию f(x,y), написанную на python?

Если нет, каковы альтернативы?

1 Ответ

16 голосов
/ 25 декабря 2011

Основной рабочий процесс при написании графического интерфейса PyQt4:

  1. Разработка интерфейса с использованием Qt Designer.
  2. Создание модуля Python из файла интерфейса с использованием pyuic4.
  3. Создание модуля приложения для логики основной программы.
  4. Импорт класса GUI в модуль приложения.
  5. Подключение интерфейса пользователя к логике программы.

Итак, учитывая файл пользовательского интерфейса calc.ui, вы можете сгенерировать модуль пользовательского интерфейса с помощью:

pyuic4 -w calc.ui > calc_ui.py

И затем создать модуль приложения примерно так:

from PyQt4 import QtGui, QtCore
from calc_ui import CalculatorUI

class Calculator(CalculatorUI):
    def __init__(self):
        CalculatorUI.__init__(self)
        self.buttonCalc.clicked.connect(self.handleCalculate)

    def handleCalculate(self):
        x = int(self.lineEditX.text())
        y = int(self.lineEditY.text())
        self.lineEditZ.setText(str(x + y))

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Calculator()
    window.show()
    sys.exit(app.exec_())

Обратите внимание, чтоэто помогает установить objectName для каждого виджета в редакторе свойств дизайнера, чтобы впоследствии их можно было легко идентифицировать.В частности, objectName основной формы станет именем класса импортируемого класса графического интерфейса пользователя (при условии использования флага "-w" для pyuic4).

...