此问题已经在这里有了答案:
我需要弹出一个对话框,但是每次对话框弹出时,总是会检查某些按钮,无论我在启动前如何设置它的属性,总是会被选中,有人可以告诉我原因吗?
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class Demo(QDialog):
def __init__(self):
super().__init__()
layout = QHBoxLayout()
layout.setContentsMargins(0, 0, 0, 0)
self.export_bn = QPushButton('export')
self.search_bn = QPushButton('search')
layout.addStretch(1)
layout.addWidget(self.export_bn)
layout.addWidget(self.search_bn)
main_layout = QVBoxLayout()
main_layout.addLayout(layout)
main_layout.addWidget(QTextEdit('Test'))
self.setLayout(main_layout)
#unchecked this button not working when start a window
self.export_bn.setChecked(False)
app = QApplication([])
demo = Demo()
demo.show()
app.exec()
[导出按钮被选中,对话框弹出时我不想选中任何按钮。
这看起来像是自动默认按钮的行为。
从documentation属性的autoDefault
:
在某些GUI样式中,默认按钮会画上一个额外的框,最多3像素或更多。
和
对于具有QDialog父级的按钮,此属性的默认值为true;否则默认为false。
QDialog
会在您调用parent
时自动成为按钮的setLayout
,因此两个按钮的autoDefault
属性都将是True
。
因此,您可以使用self.export_bn.setChecked(False)
代替:
self.export_bn.setAutoDefault(False)
self.search_bn.setAutoDefault(False)