PyQt4如何获取复选框的"text"
PyQt4 How to get the "text" of a checkbox
所以我试图在选中复选框后立即将与选中的复选框关联的 "text" 添加到列表中,我正在这样做:
class Interface(QtGui.QMainWindow):
def __init__(self):
super(Interface, self).__init__()
self.initUI()
self.shops=[]
def initUI(self):
widthPx = 500
heightPx = 500
self.setGeometry(100,100,widthPx,heightPx)
#menus
fileMenu = menuBar.addMenu("&File")
helpMenu = menuBar.addMenu("&Help")
#labels
shopList = _getShops()
for i, shop in enumerate(shopList):
cb = QtGui.QCheckBox(shop, self)
cb.move(20, 15*(i)+50)
cb.toggle()
cb.stateChanged.connect(self.addShop)
self.setWindowTitle("Absolute")
self.show()
def addShop(self, state):
if state == QtCore.Qt.Checked:
#I want to add the checkbox's text
self.shops.append('IT WORKS')
else:
self.shops.remove('IT WORKS')
但我不想添加 "IT WORKS",而是想添加与刚刚选中的复选框关联的文本。
我通常使用 partial
在我的 signals/slots 中传递附加参数
Functools doc
您可以使用它来传递您的复选框文本。
首先,导入部分:
from functools import partial
然后,更改您的 connect() 方法并传递您的复选框文本:
cb.stateChanged.connect( partial( self.addShop, shop) )
最后,更新您的 addShop()
方法:
def addShop(self, shop, state):
if state == Qt.Checked:
self.shops.append(shop)
else:
try:
self.shops.remove(shop)
except:
print ""
备注:
我在末尾添加了一个 try/except,因为您的复选框默认处于选中状态。当您取消选中它们时,它会尝试从您的 self.shops 列表中删除未知项目。
使用此方法,这不是发送到您的方法的当前复选框文本。它是用于初始化复选框的第一个文本。如果在脚本执行期间修改了复选框文本,它不会在您的 addShop 方法中更新。
更新:
事实上,您可以在部分中通过您的复选框:
cb.stateChanged.connect( partial( self.addShop, cb) )
并以这种方式检索它:
def addShop(self, shop, state):
if state == Qt.Checked:
self.shops.append(shop.text())
else:
try:
self.shops.remove(shop.text())
except:
print ""
所以我试图在选中复选框后立即将与选中的复选框关联的 "text" 添加到列表中,我正在这样做:
class Interface(QtGui.QMainWindow):
def __init__(self):
super(Interface, self).__init__()
self.initUI()
self.shops=[]
def initUI(self):
widthPx = 500
heightPx = 500
self.setGeometry(100,100,widthPx,heightPx)
#menus
fileMenu = menuBar.addMenu("&File")
helpMenu = menuBar.addMenu("&Help")
#labels
shopList = _getShops()
for i, shop in enumerate(shopList):
cb = QtGui.QCheckBox(shop, self)
cb.move(20, 15*(i)+50)
cb.toggle()
cb.stateChanged.connect(self.addShop)
self.setWindowTitle("Absolute")
self.show()
def addShop(self, state):
if state == QtCore.Qt.Checked:
#I want to add the checkbox's text
self.shops.append('IT WORKS')
else:
self.shops.remove('IT WORKS')
但我不想添加 "IT WORKS",而是想添加与刚刚选中的复选框关联的文本。
我通常使用 partial
在我的 signals/slots 中传递附加参数
Functools doc
您可以使用它来传递您的复选框文本。
首先,导入部分:
from functools import partial
然后,更改您的 connect() 方法并传递您的复选框文本:
cb.stateChanged.connect( partial( self.addShop, shop) )
最后,更新您的 addShop()
方法:
def addShop(self, shop, state):
if state == Qt.Checked:
self.shops.append(shop)
else:
try:
self.shops.remove(shop)
except:
print ""
备注:
我在末尾添加了一个 try/except,因为您的复选框默认处于选中状态。当您取消选中它们时,它会尝试从您的 self.shops 列表中删除未知项目。
使用此方法,这不是发送到您的方法的当前复选框文本。它是用于初始化复选框的第一个文本。如果在脚本执行期间修改了复选框文本,它不会在您的 addShop 方法中更新。
更新:
事实上,您可以在部分中通过您的复选框:
cb.stateChanged.connect( partial( self.addShop, cb) )
并以这种方式检索它:
def addShop(self, shop, state):
if state == Qt.Checked:
self.shops.append(shop.text())
else:
try:
self.shops.remove(shop.text())
except:
print ""