установить фокус на кнопку в приложении с групповыми полями - PullRequest
0 голосов
/ 17 октября 2018

Допустим, у меня есть приложение с несколькими QGroupBox, например:

import sys


from PyQt4 import QtGui, QtCore


class Main(QtGui.QWidget):
    # pylint: disable=too-many-statements
    def __init__(self, main):
        super(Main, self).__init__()
        self.grid_layout = QtGui.QGridLayout()

        self.line_edit = QtGui.QLineEdit()
        self.grid_layout.addWidget(self.create_settings_group(), 0, 0, 2, 1)

        self.push_button = QtGui.QPushButton("go", self)
        self.grid_layout.addWidget(self.create_controls_group(), 0, 1)

        self.setLayout(self.grid_layout)
        main.setCentralWidget(self)

    def create_settings_group(self):
        group_box_settings = QtGui.QGroupBox(self)
        group_box_settings.setTitle("group1")
        grid = QtGui.QGridLayout()
        grid.addWidget(self.line_edit, 0, 0)
        group_box_settings.setLayout(grid)
        return group_box_settings

    def create_controls_group(self):
        group_box_settings = QtGui.QGroupBox(self)
        group_box_settings.setTitle("group2")
        grid = QtGui.QGridLayout()
        grid.addWidget(self.push_button, 0, 0, 1, 2)
        group_box_settings.setLayout(grid)
        return group_box_settings


class GUI(QtGui.QMainWindow):

    def __init__(self):
        super(GUI, self).__init__()
        self.ui = Main(self)
        self.show()


app = QtGui.QApplication(sys.argv)
ex = GUI()
app.exec_()

Когда я открываю свое простое приложение, я вижу, что курсор мигает в строке редактирования.Но я просто хочу, чтобы кнопка в другом групповом окне была подсвечена и чтобы она была нажата?как я это сделал?использование self.push_button.setFocus () ничего не делает.

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Вы должны установить фокус через мгновение после его появления, вы можете использовать QTimer::singleShot() или QMetaObject::invokeMethod():

1.QTimer::singleShot()

...
self.push_button = QtGui.QPushButton("go", self)
self.grid_layout.addWidget(self.create_controls_group(), 0, 1)

self.push_button.setDefault(True)
QtCore.QTimer.singleShot(0, self.push_button.setFocus)

2.QMetaObject::invokeMethod()

...
self.push_button = QtGui.QPushButton("go", self)
self.grid_layout.addWidget(self.create_controls_group(), 0, 1)

self.push_button.setDefault(True)
QtCore.QMetaObject.invokeMethod(self.push_button, 
    "setFocus",
    QtCore.Qt.QueuedConnection)
0 голосов
/ 17 октября 2018

Вы можете попробовать установить свойство кнопки Default:

self.push_button.setDefault(True)
self.push_button.setFocus()
...