PyQt4
을 사용하여 GUI를 작성하기 시작했습니다. 이것은 GUI에 대한 나의 첫 번째 경험이다 (또한 oo-programming은 다소 새로운 것이다). 해당 GUI의 일부는 QComboBox
의 4 ~ 5 인스턴스와 같습니다. 선택의 폭이 넓어지기 때문에 나중에 사용자가 비주류 적으로 변경되지 않도록 선택 항목을 잠글 수 있어야합니다.QCheckBox를 사용하여 PyQt4 QComboBox에서 선택 항목 잠금
import sys
from PyQt4 import QtGui, QtCore
class MyGui(QtGui.QWidget):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.resize(250, 50)
# vertical layout for widgets
self.vbox = QtGui.QVBoxLayout()
self.setLayout(self.vbox)
# Create a combo box with some choices
self.combo_color = QtGui.QComboBox()
self.vbox.addWidget(self.combo_color)
items = 'Red Yellow Purple'.split()
self.combo_color.addItems(items)
self.connect(self.combo_color, QtCore.SIGNAL('activated(QString)'), self.use_choice)
# add a checkbox next to the combobox which (un-)locks the the combo-choice
self.checkbox_color = QtGui.QCheckBox('Lock Choice', self)
self.vbox.addWidget(self.checkbox_color)
self.connect(self.checkbox_color, QtCore.SIGNAL('stateChanged(int)'), self.lock_choice)
def use_choice(self, text):
# do something very useful with the choice
print 'The current choice is: {choice}'.format(choice=text)
def lock_choice(self):
if self.checkbox_color.isChecked():
self.combo_color.setEnabled(False)
print 'Choice {choice} locked'.format(choice=self.combo_color.currentText())
else:
self.combo_color.setEnabled(True)
print 'Choice unlocked'
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
mygui = MyGui()
mygui.show()
app.exec_()
이 코드는 무엇을 그것은해야하지,하지만 방법 lock_choice
하드 코딩 단지를 잠 그려면이기 때문에, 그 디자인에 아주 불만이 하나 QComboBox 위해 나는 내가 쓴이 코드의 문제를 해결할 수 QComboBox combo_color
의 선택. 내가 지금 다른 QComboBox에 대해 같은 일을 할 (combo_name
를 말)와 클래스에 __init__(self)
코드 블록에 다음 코드를 추가하여 실현 될 수있는 두 번째 QCheckBox (checkbox_name
말) 경우 :
# create second combo box with some other choices
self.combo_name = QtGui.QComboBox()
self.vbox.addWidget(self.combo_name)
items = 'Bob Peter'.split()
self.combo_name.addItems(items)
self.connect(self.combo_name, QtCore.SIGNAL('activated(QString)'), self.use_choice)
# add a checkbox next to the combobox which (un-)locks the the combo-choice
self.checkbox_name = QtGui.QCheckBox('Lock Choice', self)
self.vbox.addWidget(self.checkbox_name)
self.connect(self.checkbox_name, QtCore.SIGNAL('stateChanged(int)'), self.lock_choice) # <-- obviously wrong, as it (un-)locks color choice at the moment
모두 QComboBoxes을 지금 방법 use_choice()
을 공유 할 수 있지만 두 가지 확인란이 모두 색상 선택을 고정하므로 lock_choice()
메서드를 공유 할 수 없습니다. 체크 박스 checkbox_name
을 사용하여 현재 lock_choice()
-method를 복사하여 붙여 넣거나 하드 코드 된 콤보 박스를 전환하지 않고 이름 선택을 잠그고 싶습니다. 나는 target-combobox를 메서드에 전달하는 것과 같은 쉬운 방법이 있다고 확신하는데, 아직 모르겠습니다. 도와 주시면 감사하겠습니다!
"귀하는 인수를 추가 할 수 있습니다"라는 부분을 설명해주십시오. 이것은 내가 찾고있는 것으로 보인다. – Nras
Tanks, 너 무슨 뜻인지 안다. 그러나 현재 버전에서는 버그가 있습니다.''combos.isChecked() :''는 AttributeError : 'QComboBox'객체에 'isChecked'' 속성이 없습니다. 체크 박스는''isChecked()''에 대해서 체크된다. 올바른 체크 박스를 인수로 전달할 것을 제안 하시겠습니까? 아니면 다른 방법이 있습니까? QComboBox에 – Nras
을 사용하는 경우 combos.isEnabled (True)를 사용할 수 있습니다.QCheckBox에 대한 – Ejaz