【发布时间】:2020-03-21 10:48:52
【问题描述】:
我正在创建一个应用程序,我需要在其中制作一个清单,其中包含另一个班级给我的清单。用户将选中他们想要的项目旁边的复选框,然后单击一个按钮。对于那些被检查的行,我想打印“你检查了数字___”。在相邻的 QBoxGroup 的 QLabel 中。
(在我的实际应用程序中,我正在遍历类,我将在类中调用一个函数)。我很难遍历我的列表,因为我必须检查是否选中了该框以及名称是否是我要打印的名称(打印的语句与实际名称不同,因为在我的应用程序中我将在我所在行的类中调用一个函数。
如果用户使用 QLabel 选中多个框,我也不确定如何打印多个语句。我可能不得不让用户一次只能选择一行,但这比上面的问题要小。
from PyQt5.QtWidgets import (QApplication, QTabWidget, QVBoxLayout, QWidget, QGridLayout, QLabel, QGroupBox,
QListView, QPushButton)
from PyQt5.QtGui import QStandardItem, QStandardItemModel
from PyQt5.QtCore import Qt
import sys, os
class MyPage(QWidget):
def __init__(self):
super().__init__()
self.app = QApplication(sys.argv)
self.screen = self.app.primaryScreen()
self.size = self.screen.size()
self.mydata = None
# These numbers are arbitrary and seemed
# to have the best balance
self.textWidth = self.size.width() * 0.64
self.chooseWidth = self.size.width() * 0.29
self.createTextGroup()
self.createStatsGroup()
self.layout = QGridLayout()
self.layout.addWidget(self.TextGroup, 0, 0, 0, 1)
self.layout.addWidget(self.StatsGroup, 0, 1)
self.setLayout(self.layout)
self.show()
# The left side of AnalysisTab containing the textbox
# where the analysis will be shown
def createTextGroup(self):
self.TextGroup = QGroupBox("Analysis")
self.TextGroup.setFixedWidth(self.textWidth)
self.setStyleSheet("font: 15pt Tw Cen MT")
# Here is where the analysis will go
self.analysis = QLabel()
self.layout = QGridLayout()
self.layout.addWidget(self.analysis)
self.TextGroup.setLayout(self.layout)
# The right side of AnalysisTab containing a checklist of tests that
# may be run on the data and a button to press to run the tests
def createStatsGroup(self):
self.StatsGroup = QGroupBox("Statistics Tests")
self.StatsGroup.setFixedWidth(self.chooseWidth)
self.setStyleSheet("font: 15pt Tw Cen MT")
# List widgets where users will choose what analysis
# they would like ran on their data
self.statsAnalysis = QListView()
self.model = QStandardItemModel(self.statsAnalysis)
for member in myList(self):
item = QStandardItem(member)
item.setCheckable(True)
check = Qt.Unchecked
item.setCheckState(check)
self.model.appendRow(item)
self.statsButton = QPushButton("Analyze")
self.statsButton.clicked.connect(self.statsButtonClicked)
self.statsAnalysis.setModel(self.model)
self.layout = QGridLayout()
self.layout.addWidget(self.statsAnalysis, 0, 0, 0, 1)
self.layout.addWidget(self.statsButton, 1, 1)
self.StatsGroup.setLayout(self.layout)
def statsButtonClicked(self):
model2 = self.model
for index in range(model2.rowCount()):
item = model2.item(index)
if item.checkState() == Qt.Unchecked and item == "One":
self.analysis.setText("You checked number 1")
elif item.checkState() == Qt.Unchecked and item == "One":
self.analysis.setText("You checked number 2")
elif item.checkState() == Qt.Unchecked and item == "One":
self.analysis.setText("You checked number 3")
elif item.checkState() == Qt.Unchecked and item == "One":
self.analysis.setText("You checked number 4")
elif item.checkState() == Qt.Unchecked and item == "One":
self.analysis.setText("You checked number 5")
else:
self.analysis.setText("You didn't check anything")
def myList(self):
thisList = ["One", "Two", "Three", "Four", "Five"]
return thisList
def runStatsWiz():
app = QApplication(sys.argv)
myPage = MyPage()
myPage.show()
app.exec_()
runStatsWiz()
现在,statsButtonClicked() 函数返回TypeError: 'QStandardItemModel' object is not callable
我已经尝试了这些 StackOverflow 页面上的信息,但我似乎无法弄清楚如何查看行的名称以及是否检查了该行:
【问题讨论】:
-
错字:将
model2 = self.model()更改为model2 = self.model -
@eyllanesc 可以迭代;谢谢!!现在,我无法检查项目的名称并进行比较。当我单击该按钮时,它会遍历所有语句并到达“else”语句并打印“您没有检查任何内容”。你知道如何在迭代时获取项目的名称吗?
-
你检查我的答案了吗?
标签: python pyqt pyqt5 qstandarditemmodel