self.a = QtGui.QRadioButton()
self.b = QtGui.QRadioButton()
當我有一個數組:ARR = [ 「一」, 「B」, 「C」 ...... 「×」, 「Z」]如何在python中創建複選框或單選按鈕?
如何創建它更有效,而不是26次?
self.a = QtGui.QRadioButton()
self.b = QtGui.QRadioButton()
當我有一個數組:ARR = [ 「一」, 「B」, 「C」 ...... 「×」, 「Z」]如何在python中創建複選框或單選按鈕?
如何創建它更有效,而不是26次?
很多時候,您不需要保留對按鈕的本地引用。在這種情況下,只要他們有一個能夠照顧他們的父控件,就可以放心地忘記他們。
使用QButtonGroup
及其全局信號buttonClicked
也將有助於以通用方式管理一組按鈕。但是您也可以使用partial
將每個按鈕連接到單個插槽以傳輸用戶定義的數據,這些數據將幫助您確定哪個按鈕會生成回調。
import sys
import string
from PyQt5 import QtWidgets, QtCore
class Window(QtWidgets.QDialog):
def __init__(self):
super().__init__()
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.letters = list(string.ascii_lowercase)
self.lay = QtWidgets.QVBoxLayout(self)
self.group = QtWidgets.QButtonGroup()
# Create all the buttons
for letter in self.letters:
btn = QtWidgets.QRadioButton(letter, self)
# In case you want to find it back later using findChild
btn.setObjectName("btn_"+letter)
self.group.addButton(btn)
self.lay.addWidget(btn)
self.group.buttonClicked.connect(self.btnCliked)
def btnCliked(self, btn):
# Do something with the button
print(btn.text())
def main():
qApp = QtWidgets.QApplication(sys.argv)
win = Window()
win.show()
sys.exit(qApp.exec_())
if __name__ == '__main__':
main()
與partial
實施例:
from functools import partial
[...]
for letter in self.letters:
btn = QtWidgets.QRadioButton(letter, self)
self.lay.addWidget(btn)
btn.clicked.connect(partial(self.btnClicked, letter))
[...]
def btnCliked(self, letter):
print(letter)
每個單選按鈕不分配給自己的實例變量在類,使用,而不是一本字典:命名爲self.buttons
import string
from QtGui import QRadioButton
class RadioButtons(object):
def __init__(self, keys=string.ascii_lowercase):
self.buttons = {c: QRadioButton() for c in keys}
這將創建一個字典(使用字典理解)作爲內的實例變量類RadioButtons的對象。您可以使用字典查詢進入各個按鈕:
rb.buttons['z']
>>> rb = RadioButtons()
>>> rb.buttons['a']
<__main__.QRadioButton object at 0x7f576c3666d0>
>>> rb.buttons['z']
<__main__.QRadioButton object at 0x7f576c36a550>
字典是要走的路,但如果你真的必須有每個按鈕作爲一個實例變量,那麼你可以做這樣的事情:
class RadioButtons(object):
def __init__(self, keys=string.ascii_lowercase):
self.__dict__.update({c: QRadioButton() for c in keys})
>>> rb = RadioButtons()
>>> rb.a
<__main__.QRadioButton object at 0x7f576c3666d0>
>>> rb.z
<__main__.QRadioButton object at 0x7f576c36a550>
可能重複:http://stackoverflow.com/questions/16060899/alphabet-range-python – cel 2015-04-04 10:20:19