PyQt - 固定标题组合框
问题描述:
我想创建一个带有固定标题的PyQt组合框。更具体的这意味着我想有一个下拉菜单,用户可以从中选择,但下拉按钮始终标记为相同。例如,我想为用户创建一个选项来指定绘图的图例的位置。此按钮应始终标记为“图例”,但当您点击该按钮时,会打开一个下拉菜单,其中包含诸如“右上”,“左上”,“上”等放置选项。一旦用户选择了选项图例更新,但按钮仍然是“传奇”。 我有这个至今:PyQt - 固定标题组合框
self.fnLegendButton = QtGui.QComboBox()
self.fnLegendButton.addItems('Upper right,Lower right,Upper left,Lower left,Top,Disable'.split(','))
self.fnLegendButton.setCurrentIndex(0)
self.fnLegendButton.setToolTip('Select the legend position.')
self.fnLegendButton.currentIndexChanged.connect(<positioning function>)
self.fnLegendButton.setMaximumWidth(60)
答
这里有一个工作示例:
import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.fnLegendButton = QtGui.QComboBox(self)
self.fnLegendButton.addItems(
'Legend,Upper right,Lower right,Upper left,Lower left,Top,Disable'.split(','))
self.fnLegendButton.setCurrentIndex(0)
self.fnLegendButton.setToolTip('Select the legend position.')
self.fnLegendButton.currentIndexChanged[
str].connect(self.avoid_db_change)
self.fnLegendButton.setMaximumWidth(100)
self.fnLegendButton.move(50, 50)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('QtGui.QCheckBox')
self.show()
def avoid_db_change(self, text):
print("Processing {0} item".format(text))
self.fnLegendButton.blockSignals(True)
self.fnLegendButton.setCurrentIndex(0)
self.fnLegendButton.blockSignals(False)
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
此代码的重要位是avoid_db_change内,该功能是用来保持“传奇”的文字之一不管你按下哪个项目。现在,当执行时,您不希望再次触发该功能,因此为了避免这种情况,可以将它包括在几个blockSignals方法中。试着评论blockSignals方法,你会明白这意味着什么。
如果你可以评论一下代码,那将会很好。 – uitty400
@ uitty400好吧,我编辑了我的答案,并添加了一些关于代码相关部分的评论 – BPL