Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Как создать связь сигнал-слот с пунктом меню используя uic.loadUi? [RSS Feed]

#1 Апрель 19, 2011 11:40:31

МИша
От:
Зарегистрирован: 2011-04-19
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как создать связь сигнал-слот с пунктом меню используя uic.loadUi?

Здавствуйте, формучане!
Нарисовал форму в Qt Designer. Теперь подгружаю ее используя uic.LoadUi. На форме есть меню-бар (menubar) на нем пункт меню menuApplication в него добавлено действие (пусть хоть ActionExit).
Хочу создать связь сигнал-слот с этим действием. Делаю вот так:

#! /usr/bin/env python

from PyQt4 import QtCore, QtGui, uic

class MainForm(QtGui.QMainWindow):

def __init__(self):
super(MainForm, self).__init__()
uic.loadUi("mainform.ui", self)

self.menubar.menuApplication.connect(ActionExit, QtCore.SIGNAL('clicked()'), QtCore.SLOT('close()'))
На последней строчке выдает ошибку AttributeError: ‘QMenuBar’ object has no attribute ‘menuApplication’
Так ведь и в самом QtDesigner'е нельзя создать связь сигнал-слот от пункта меню, а можно только от самого меню(При фокусе, щелчке и тд)
Так вот. Как создать эту самую связь, именно используя loadUI? Вариант с генерацией кода посредством pyuic4 известен, но кажется несколько более трудоемким, и так как времени не хватает, хотелось бы использовать именно динамику.



Офлайн

#2 Апрель 19, 2011 13:34:06

MichaelN
От:
Зарегистрирован: 2011-04-02
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Как создать связь сигнал-слот с пунктом меню используя uic.loadUi?

Вот смотри.
Есть стандартный пример в C:\Python27\Lib\site-packages\PyQt4\examples\pyuic\compile-on-the-fly.pyw

В твоём случае не clicked() а triggered()

Я построил на основе этого примера твой код

#!/usr/bin/env python
# coding=utf-8
import sys
from PyQt4 import QtCore, QtGui, uic
formClass, base_class = uic.loadUiType('mainform.ui')

class FormMain(QtGui.QMainWindow, formClass):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
self.connect(self.actionPrint_me, QtCore.SIGNAL('triggered()'), self.hello)

def hello(self):
print("hello print_me")

def main():

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

if __name__ == "__main__":
main()
Но в дальнейшем лучше конвертируй этот *.ui файл ( команда: pyuic4 mainform.ui -o mainform.py),
в пайтон код и подключай пайтан классы к проекту, так проще и глазам приятней смотреть на пайтон код чем на xml код.



Офлайн

#3 Апрель 20, 2011 19:20:16

МИша
От:
Зарегистрирован: 2011-04-19
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как создать связь сигнал-слот с пунктом меню используя uic.loadUi?

Наконец-то проверил. И правда работает) Спасибо большое. Я нашел у себя доки в /usr/share/doc/python-qt4-doc/examples/pyuic
Мне как раз был интересен вариант без конвертирования: глазам приятно не смотреть на тонны пайтон кода, а просто использовать готовый класс с необходимым интерфейсом :D



Офлайн

  • Начало
  • » GUI
  • » Как создать связь сигнал-слот с пунктом меню используя uic.loadUi?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version