pyqt 获取网格里面选中的值

ksx_120999 2019-01-22 07:57:05
先上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.
没有那个高手解决一下。
...全文
194 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ksx_120999 2019-01-22
  • 打赏
  • 举报
回复
C或者C++代码也行,加点注释什么的,都没有高手吗
ksx_120999 2019-01-22
  • 打赏
  • 举报
回复
我有看到一个 QButtonGroup ,然后用addButton的方式,可以在点击的时候直接获取操作的 sString,但是那个只能是单选的。
ksx_120999 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 的方式完成,然后设置背景色来显示选中。

16,214

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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