将数据分配给 QComboBox 中的项目[重复]

Posted

技术标签:

【中文标题】将数据分配给 QComboBox 中的项目[重复]【英文标题】:Assign data to an item from QComboBox [duplicate] 【发布时间】:2021-10-26 05:58:45 【问题描述】:

我正在为一个软件制作一个登录表格,学生需要从 QComboBox 中选择他们的学校(组合框将显示学校的名称),该软件将连接到他们学校的平台。我正在尝试向每个项目添加数据(确切地说是平台的链接),但是在阅读了有关 *** 的几篇文章之后,到目前为止对我来说没有任何效果。

这是我的登录表单中的 QComboBox 部分:

from PyQt5 import QtCore, QtGui, QtWidgets
import sys

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(717, 571)
        Form.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        Form.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.widget = QtWidgets.QWidget(Form)
        self.widget.setGeometry(QtCore.QRect(70, 50, 590, 420))
        self.widget.setStyleSheet("QPushButton#pushButton\n"
"    background-color: rgb(23, 171, 103);\n"
"    color:rgb(255, 255, 255);\n"
"    border-radius:5px;\n"
"\n"
"")

        self.comboBox = QtWidgets.QComboBox(self.widget)
        self.comboBox.setGeometry(QtCore.QRect(60, 110, 201, 22))
        font = QtGui.QFont()
        font.setFamily("Proxima Nova Rg")
        self.comboBox.setFont(font)
        self.comboBox.setStyleSheet("")
        self.comboBox.setEditable(False)
        self.comboBox.setCurrentText("Sélectionnez votre établissement")
        self.comboBox.setFrame(False)
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.setItemText(0, "Sélectionnez votre établissement")
        self.comboBox.addItem("")
        self.comboBox.setItemText(1, "LYCEE FRANCAIS RENE DESCARTES")
        self.comboBox.addItem("")
        self.comboBox.setItemText(2, "IFS SINGAPORE ")
        self.comboBox.addItem("")
        self.comboBox.setItemText(3, "IFS SINGAPORE - 2")
        self.comboBox.addItem("")
        self.comboBox.setItemText(4, "LYCEE FRANCAIS INTERNATIONAL DE BANGKOK")
        self.comboBox.addItem("")
        self.comboBox.setItemText(5, "LYCEE FRANCAIS MARGUERITE DURAS")
       
if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
        Form = QtWidgets.QWidget()
        ui = Ui_Form()
        ui.setupUi(Form)
        Form.show()
        sys.exit(app.exec())

我已经将平台的链接分配为每个项目的数据使用这个 self.comboBox.setItemData

self.comboBox.setItemData(0, "https://platform....")
self.comboBox.setItemData(1, "https://platform....")
self.comboBox.setItemData(2, "https://platform....")
self.comboBox.setItemData(3, "https://platform....")
self.comboBox.setItemData(4, "https://platform....")
self.comboBox.setItemData(5, "https://platform....")

【问题讨论】:

【参考方案1】:

我不确定你的计划是什么。但是,如果您想显示 Dropbox,则需要将其放在小部件中。我已经重写了您的代码,但仍然有些事情没有多大意义。您可以将 QComboBox 子类化并设置您的 Box 并将其放入 Widget 中。

您需要通过将 QWidgets 添加到布局中来了解将 QWidgets 附加到其他 QWidgets 的概念,否则它们将不会显示,就像这样。

class SomeWidget(QWidget):
    
    def __init__(self):
        QWidget.__init__(self)  # call the constructor from the inheriting class
        some_other_widget = QComboBox()
        any_layout        = QVBoxLayout()  # others are QHBoxLayout, QGridLayout etc.
        any_layout.addWidget(some_other_widget)  # add your widgets to the layout
        self.setLayout(any_layout)  # add your layout to the Widget your creating

对于您的代码,我尝试尽可能减少更改并使其运行。很多行在你的程序中没有多大意义

你知道可以在另一个 Widget 中添加这个 Widget 以获得一个窗口框架,或者只是从你的程序中删除 self.setWindowFlags

from PyQt5.QtWidgets import QWidget, QComboBox, QApplication, QVBoxLayout
from PyQt5.QtCore import Qt, QRect
from PyQt5.QtGui import QFont
import sys


class Ui_Form(QWidget):

    def __init__(self):
        QWidget.__init__(self)
        self.setObjectName("Form")
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_TranslucentBackground)
        self.setGeometry(QRect(70, 50, 590, 420))
        self.setStyleSheet("QPushButton#pushButton\n"
                                  "    background-color: rgb(23, 171, 103);\n"
                                  "    color:rgb(255, 255, 255);\n"
                                  "    border-radius:5px;\n"
                                  "\n"
                                  "")

        self.comboBox = QComboBox()
        # self.comboBox.setGeometry(QRect(60, 110, 201, 22))
        font = QFont()
        font.setFamily("Proxima Nova Rg")
        self.comboBox.setFont(font)
        self.comboBox.setStyleSheet("")
        self.comboBox.setEditable(False)
        self.comboBox.setCurrentText("Sélectionnez votre établissement")
        self.comboBox.setFrame(False)
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.setItemText(0, "Sélectionnez votre établissement")
        self.comboBox.addItem("")
        self.comboBox.setItemText(1, "LYCEE FRANCAIS RENE DESCARTES")
        self.comboBox.addItem("")
        self.comboBox.setItemText(2, "IFS SINGAPORE ")
        self.comboBox.addItem("")
        self.comboBox.setItemText(3, "IFS SINGAPORE - 2")
        self.comboBox.addItem("")
        self.comboBox.setItemText(4, "LYCEE FRANCAIS INTERNATIONAL DE BANGKOK")
        self.comboBox.addItem("")
        self.comboBox.setItemText(5, "LYCEE FRANCAIS MARGUERITE DURAS")
        self.setLayout(QVBoxLayout())
        self.layout().addWidget(self.comboBox)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    Form = Ui_Form()
    Form.show()
    Form.resize(717, 571)
    sys.exit(app.exec())

【讨论】:

如果您还有其他问题,最好在这里提问,这样其他人也可以从中学习。 更新:嗨,我设法找到了可用于将平台链接分配为组合框 self.comboBox.setItemData 的每个项目的数据的命令 我设法打印 itemData 但终端显示我用这个而不是链接: 有没有办法在终端中显示链接?我知道我们可以使用 self.comboBox.currentText 来处理 itemText,但我找不到 itemData 的命令。 你想做什么?是否要向组合框添加更多项目? @Galileo 请edit 您的问题并尝试澄清您要做什么,因为现在很难理解您的问题是什么。如果用英语写作对你来说很困难,找一个可以帮助你的人。还要花点时间关注tour 并阅读How to Ask 好问题,并记住 *** 不是论坛或聊天,通常不鼓励用户之间直接联系,因为与帖子相关的所有内容都应该可供任何人使用: 你的问题应该也能帮助到别人,而不仅仅是你。 @Galileo 使用 self.comboBox.currentData()self.comboBox.itemData(self.comboBox.currentIndex())

以上是关于将数据分配给 QComboBox 中的项目[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将信号的值分配给变量

如何将 Cloud Firestore 中的数据分配给 Android 的全局变量 [重复]

使用排序的 QAbstractTableModel 时如何将“选择项目...”添加到 QComboBox?

将输出分配给Bash中的变量[重复]

将16个团队中的随机团队分配给8个人中的一个随机人[重复]

Flutter中的参数类型“String”无法分配给参数类型“Uri”[重复]