Найти - Пользователи
Полная версия: Как сделать кнопке QPushButton возможность нажатия кл. "Ввод"?
Начало » GUI » Как сделать кнопке QPushButton возможность нажатия кл. "Ввод"?
1
Franek
Метод setAutoDefault или setDefault добавлял, но почему-то не работает. (Думал, может причина что кнопка не в фокусе, пробовал сделать фокус активным методом setFocus, но тоже не получается.) Подскажите, не знаю в чем проблема.
 import sys, random
from PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit, QGridLayout, QApplication, QPushButton)
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    def create_cort(self):
        global cort
        cort = self.sp_five[self.i]
        self.rulbl.setText(cort[0])
        self.i += 1
    def begin(self):
        self.sp_five = []
        self.i = 0
        for o in range(4):
            j = random.randint(0, len(self.all_words)-1)
            self.sp_five.append(self.all_words[j])
        self.phase_one()
    def phase_one(self):
        self.create_cort()
        self.show_word()
    def show_word(self):
        self.qle1.setText(cort[1])
    def initUI(self):
        self.rulbl = QLabel()
        self.qle1 = QLineEdit(self)
        file = open("words.txt", "r")
        self.all_words = []
        for line in file.readlines():
            lines = line.split()
            self.all_words.append(tuple(lines))
        self.begin()
        self.bt = QPushButton('Запомнил')
        self.bt.clicked.connect(self.phase_one)
        self.bt.setFocus()
        self.bt.setAutoDefault(True)
        print(self.bt.hasFocus())
        grid = QGridLayout()
        grid.addWidget(self.rulbl, 1, 1)
        grid.addWidget(self.qle1, 2, 1)
        grid.addWidget(self.bt, 5, 1)
        self.setLayout(grid)
        self.setGeometry(300, 300, 380, 300)
        self.show()
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
Franek
Первое нажатие кнопки работает только мышью, при следующей итерации - уже работает клавиша “Ввод”.
KriO
В моём простейшем тесте работает сразу после первого же нажатия клавиши Enter и не надо никакого первого нажатия мышью.
 #!/usr/bin/env python
# -*- coding: iso-8859-5 -*-
from PyQt4 import QtCore, QtGui
class PB(QtGui.QWidget):
    def __init__(self):
        super(PB, self).__init__()
        hb = QtGui.QHBoxLayout()
        self.setLayout(hb)
        self.but = QtGui.QPushButton("Button")
        self.but.clicked.connect(self.printText)
        self.but.setAutoDefault(True)
        self.but.setDefault(True)
        reason = QtCore.Qt.TabFocusReason | QtCore.Qt.BacktabFocusReason | QtCore.Qt.ActiveWindowFocusReason | QtCore.Qt.ShortcutFocusReason
        self.but.setFocus(reason)
        hb.addWidget(self.but)
    def printText(self):
        print "On cliced button"
#===============================
if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    w = PB()
    w.show()
    res = app.exec_()
    sys.exit(res)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB