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方法,你会明白这意味着什么。

+0

如果你可以评论一下代码,那将会很好。 – uitty400

+0

@ uitty400好吧,我编辑了我的答案,并添加了一些关于代码相关部分的评论 – BPL