Форум сайта python.su
Метод 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_())
Офлайн
Первое нажатие кнопки работает только мышью, при следующей итерации - уже работает клавиша “Ввод”.
Офлайн
В моём простейшем тесте работает сразу после первого же нажатия клавиши 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)
Офлайн