LINUX.ORG.RU

PyQt5 и PyUIC: горячие клавиши в сгенерённых виджетах не работают под Linux...

 , , ,


1

1

Хочу я, братцы, создать приложение на PyQt5, на Qt Widgets. А для того использую Qt Designer, чтобы сгенерить формочки, а потом PyUIC, чтобы сделать из них питоний код. Есть в тех формочках некоторые горячие клавиши, которые повешены на тамошние менюшки. Одна беда: эти горячие клавиши работают под виндами, а вот под моей Ubuntu 16.10 не делают ничего, от слова совсем. Хотя если на менюшку кликнуть мышкой, то она, конечно, сработает.

Имею спросить: а не встречался ли кто с подобным?

И да, вот держите пример: тут есть код, сгенерённый PyUICом, а в конце вставлен уже мой код (там надо, по идее, закрывать окно по нажатию Ctrl+C).

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 
#
# Created by: PyQt5 UI code generator 5.8.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_DemoWindow(object):
    def setupUi(self, DemoWindow):
        DemoWindow.setObjectName("DemoWindow")
        DemoWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(DemoWindow)
        self.centralwidget.setObjectName("centralwidget")
        DemoWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(DemoWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 25))
        self.menubar.setObjectName("menubar")
        self.menuFile = QtWidgets.QMenu(self.menubar)
        self.menuFile.setObjectName("menuFile")
        DemoWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(DemoWindow)
        self.statusbar.setObjectName("statusbar")
        DemoWindow.setStatusBar(self.statusbar)
        self.close_action = QtWidgets.QAction(DemoWindow)
        self.close_action.setObjectName("close_action")
        self.menuFile.addAction(self.close_action)
        self.menubar.addAction(self.menuFile.menuAction())

        self.retranslateUi(DemoWindow)
        self.close_action.triggered.connect(DemoWindow.close)
        QtCore.QMetaObject.connectSlotsByName(DemoWindow)

    def retranslateUi(self, DemoWindow):
        print("RETRANSLATING")
        _translate = QtCore.QCoreApplication.translate
        DemoWindow.setWindowTitle(_translate("DemoWindow", "MainWindow"))
        self.menuFile.setTitle(_translate("DemoWindow", "File"))
        self.close_action.setText(_translate("DemoWindow", "Close"))
        self.close_action.setShortcut(_translate("DemoWindow", "Ctrl+C"))





### AND HERE'S MY CODE


import sys

from PyQt5 import QtWidgets, QtGui, QtCore

class DemoWindow(QtWidgets.QMainWindow, Ui_DemoWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.setupUi(self)


if __name__ == "__main__":

    #########################################
    sys._excepthook = sys.excepthook
    def exception_hook(exctype, value, traceback):
        sys._excepthook(exctype, value, traceback)
        sys.exit(1)
    sys.excepthook = exception_hook
    ##########################################


    app = QtWidgets.QApplication(sys.argv)

    window = DemoWindow()
    window.show()

    sys.exit(app.exec_())

И да, если понадобится, то .ui-код тоже вот:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>DemoWindow</class>
 <widget class="QMainWindow" name="DemoWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget"/>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>800</width>
     <height>25</height>
    </rect>
   </property>
   <widget class="QMenu" name="menuFile">
    <property name="title">
     <string>File</string>
    </property>
    <addaction name="close_action"/>
   </widget>
   <addaction name="menuFile"/>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
  <action name="close_action">
   <property name="text">
    <string>Close</string>
   </property>
   <property name="shortcut">
    <string>Ctrl+C</string>
   </property>
  </action>
 </widget>
 <resources/>
 <connections>
  <connection>
   <sender>close_action</sender>
   <signal>triggered()</signal>
   <receiver>DemoWindow</receiver>
   <slot>close()</slot>
   <hints>
    <hint type="sourcelabel">
     <x>-1</x>
     <y>-1</y>
    </hint>
    <hint type="destinationlabel">
     <x>399</x>
     <y>299</y>
    </hint>
   </hints>
  </connection>
 </connections>
</ui>

Если поменять раскладку клавиатуры, тоже не работает?

hippi90 ★★★★ ()
Ответ на: комментарий от hippi90

Увы, даже при смене раскладки не работает = (

Yak ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.