pyqt 获取网格里面选中的值

尘封记忆 2019-01-22 08:01:49
先上python代码

# -*- coding:utf-8 -*-

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QCheckBox, QGridLayout, QGroupBox

class Example1(QWidget):
def __init__(self):
super( Example1, self ).__init__()

self.lString = ["aa","bb","cc","dd","ee","ff","gg","h",'i',
"aaa", "abb", "acc", "add", "aee", "aff", "agg", "ah", 'ai',
"baa", "bbb", "bcc", "bdd", "bee", "bff", "bgg", "bh", 'bi',
]
self.initUI()


def initUI(self):
iLen = len( self.lString )
lPositions = [[i,j] for i in range(int(iLen/5)+1) for j in range(5)]

pGroupBox = QGroupBox( u"游戏选择" )
pGrid = QGridLayout()
print("dir(pGrid) %s" % dir(pGrid))
pGrid.setSpacing(10)

for lPosition, sString in zip(lPositions, self.lString):
print("sGame %s" % sString)
pCheck = QCheckBox( sString )
pGrid.addWidget( pCheck, lPosition[0], lPosition[1] )
pCheck.stateChanged.connect( lambda : self.__onCheck(sString) )

pGroupBox.setLayout( pGrid )
self.setLayout( pGrid )

def __onCheck( self, value ):
print("onCheck:value %s" % value)

def __onGroup( self, value ):
print("onGroup:value %s" % value)


if __name__ == '__main__':

app = QApplication( sys.argv )
pExample1 = Example1()
pExample1.show()
sys.exit(app.exec_())






每次选中的时候都是在 __onCheck 打印出最后一个的被实例化的 sString 。无法获取当前选中的sString.
没有那个高手解决一下。

...全文
426 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
尘封记忆 2019-01-22
  • 打赏
  • 举报
回复
引用 1 楼 陈年椰子 的回复:
建议建立一个QCheckBox列表。 即是创建pCheck完成后,就append到列表里。 需要判断所有选中的sString 时,遍历这个列表即可。
我有看到一个 QButtonGroup ,然后用addButton的方式,可以在点击的时候直接获取操作的 sString,但是那个只能是单选的。
尘封记忆 2019-01-22
  • 打赏
  • 举报
回复
引用 1 楼 陈年椰子 的回复:
建议建立一个QCheckBox列表。 即是创建pCheck完成后,就append到列表里。 需要判断所有选中的sString 时,遍历这个列表即可。
这样效率会不会低了一点,
陈年椰子 2019-01-22
  • 打赏
  • 举报
回复
建议建立一个QCheckBox列表。 即是创建pCheck完成后,就append到列表里。
需要判断所有选中的sString 时,遍历这个列表即可。
尘封记忆 2019-01-22
  • 打赏
  • 举报
回复

# 显示内容布局

def __strLayout( self ):

	# 设置网格布局

	self.pGrid = qg.QGridLayout()

	# 设置间隔空间

	self.pGrid.setSpacing(10)

	# 将网格布局添加到当前窗口

	self.layout().addLayout( self.pGrid )

	iTotalNum = 20

	iNumPerLine = 6

	self.pBtnGroup = qg.QButtonGroup()

	# 每行iNumPerLine个游戏

	lPositions = [[i,j] for i in range(iTotalNum/iNumPerLine) for j in range(iNumPerLine)]



	for lPosition, sName in zip( lPositions, self.lStrList ):



		# 复选框

		pSelectBtn = qg.QPushButton( sName )



		sColor = ""

		if sName in self.lCurStr:

			sColor = "red"

		else:

			sColor = "white"

		self.dMapColor_[sName] = sColor

		pSelectBtn.setStyleSheet( "background-color:%s;" % sColor )



		self.dMapBtn_[sName] = pSelectBtn

		self.pBtnGroup.addButton( pSelectBtn )

		# 添加按键到指定网格位置

		self.pGrid.addWidget( pSelectBtn, lPosition[0], lPosition[1] )



	self.pBtnGroup.buttonClicked.connect( self.__onSelectBtn )
最后使用 QButtonGroup /QPushButton 的方式完成,然后设置背景色来显示选中。
手无护鸡之力 2019-01-22
  • 打赏
  • 举报
回复
用signalMap

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧