2017-07-24 73 views
0

我有一个QDialog,它有多个QLineEditQPushButton小部件。 PySide突出了第一个QLineEdit和第一个QPushButton如何避免在PySide中同时进行多重焦点?

我该如何让它专注于一件事?

我希望能够标签到QPushButton。所以,关闭焦点并不是我想要的,因为这阻止了我能够进入按钮。

这里的问题的图像:

A screenshot

而这里的代码:

#!/usr/bin/env python2.7 
# -*- coding: utf-8 -*- 

from PySide.QtCore import * 
from PySide.QtGui import * 


class UI(object): 
    def setupUi(self, SessionInfo): 
     SessionInfo.setWindowTitle("Session Info") 
#  SessionInfo.resize(313, 159) 
     self.sessionLabel = QLabel(SessionInfo) 
     self.sessionLabel.setText("Session information:") 
     self.sessionId = QLineEdit(SessionInfo) 
     self.presetsLabel = QLabel(SessionInfo) 
     self.presetsLabel.setText("Presets:") 
     self.presetsButton = QPushButton(SessionInfo) 
     self.presetsButton.setText("Choose presets file") 
     self.saveButton = QPushButton(SessionInfo) 
     self.saveButton.setText("Begin session") 
     self.saveButton.setFocusPolicy(Qt.StrongFocus) 
     spacerItem = QSpacerItem(40, 20, 
           QSizePolicy.Expanding, 
           QSizePolicy.Minimum) 
     self.gridLayout = QGridLayout(SessionInfo) 
     self.gridLayout.addWidget(self.sessionLabel, 0, 0, 1, 1) 
     self.gridLayout.addWidget(self.sessionId,  0, 1, 1, 2) 
     self.gridLayout.addWidget(self.presetsLabel, 1, 0, 1, 1) 
     self.gridLayout.addWidget(self.presetsButton, 1, 1, 1, 2) 
     self.gridLayout.addItem(spacerItem,   2, 0, 1, 2) 
     self.gridLayout.addWidget(self.saveButton,  2, 2, 1, 1) 


def main(): 
    import sys 
    app = QApplication(sys.argv) 
    Dialog = QDialog() 
    sessionInfo = UI() 
    sessionInfo.setupUi(Dialog) 
    Dialog.show() 
    sys.exit(app.exec_()) 


if __name__ == "__main__": 
    main() 
+0

我拉近默认()和正在改善的事情有点autoDefault(),但我还没有想还的行为。除了第一个LineEdit之外,我希望它首先突出显示任何内容,但当我选中某个按钮时,它应该相应地将突出显示移至该按钮。在任何地方关闭默认设置都会导致正确的初始条件,但在选中标签时没有突出显示按钮。 – Ubuntourist

+0

可以分配按钮的对焦风格。您只需在删除对话框的默认按钮设置后设置自己的对焦风格。请看我的答案。 @Ubuntourist – yuhow5566

回答

0

看来,因为它总是希望有一个确切的默认值,你不能使用QDialog为按钮,甚至从一开始就是这样。 QWidget取而代之的是更好看,但在获得焦点时不会设置其按钮的默认属性。但是,您可以自己在自定义按钮中覆盖focusInEventfocusOutEvent

例子:

from PySide.QtGui import * 

class FocusButton(QPushButton): 

    def __init__(self, *args, **kwargs): 
     QPushButton.__init__(self, *args, **kwargs) 

    def focusInEvent(self, event): 
     self.setDefault(True) 
     QPushButton.focusInEvent(self, event) 

    def focusOutEvent(self, event): 
     self.setDefault(False) 
     QPushButton.focusOutEvent(self, event) 

app = QApplication([]) 

dlg = QWidget() 

label1 = QLabel("Label one") 
label2 = QLabel("Label two") 

edit1 = QLineEdit(dlg) 

button1 = FocusButton("Button one") 
button2 = FocusButton("Button two") 

spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 

gridLayout = QGridLayout(dlg) 
gridLayout.addWidget(label1, 0, 0, 1, 1) 
gridLayout.addWidget(edit1, 0, 1, 1, 2) 
gridLayout.addWidget(label2, 1, 0, 1, 1) 
gridLayout.addWidget(button1, 1, 1, 1, 2) 
gridLayout.addItem(spacerItem, 2, 0, 1, 2) 
gridLayout.addWidget(button2, 2, 2, 1, 1) 

dlg.show() 
app.exec_() 

和按钮最初不突出,只有当他们获得焦点。

enter image description here

相关问题