Qt设计器UI(python)到JSON

Qt设计器UI(python)到JSON,python,user-interface,pyqt,signals-slots,qradiobutton,Python,User Interface,Pyqt,Signals Slots,Qradiobutton,我最近开始使用qt构建pythongui。我有两个问题不能完全解决。下面的代码是我需要构建的示例 1:检查垂直布局中单选按钮列表中已单击的单选按钮。在GUI中,它仅从布局中的所有其他可用单选按钮中选择一个。我如何感知已点击的内容 2:我想将单击的值添加到JSON对象中,但我相信这是一个简单的if语句。除非情况更复杂,否则请把我推向正确的方向 # -*- coding: utf-8 -*- # Form implementation generated from reading ui file

我最近开始使用qt构建pythongui。我有两个问题不能完全解决。下面的代码是我需要构建的示例

1:检查垂直布局中单选按钮列表中已单击的单选按钮。在GUI中,它仅从布局中的所有其他可用单选按钮中选择一个。我如何感知已点击的内容

2:我想将单击的值添加到JSON对象中,但我相信这是一个简单的if语句。除非情况更复杂,否则请把我推向正确的方向

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

# Form implementation generated from reading ui file 'test.ui'
#
# Created by: PyQt5 UI code generator 5.6
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(596, 466)
        self.verticalLayoutWidget = QtWidgets.QWidget(Dialog)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(180, 70, 61, 80))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.that = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        self.that.setObjectName("that")
        self.verticalLayout.addWidget(self.that)
        self.thi = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        self.thi.setObjectName("thi")
        self.verticalLayout.addWidget(self.thi)
        self.sure = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        self.sure.setObjectName("sure")
        self.verticalLayout.addWidget(self.sure)

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.that.setText(_translate("Dialog", "that"))
        self.thi.setText(_translate("Dialog", "this"))
        self.sure.setText(_translate("Dialog", "sure"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())

我想你需要这样的东西(未经测试)

然后创建一个函数

def self.radio_clicked(self):
    print 'ive been clicked' # work from here

使用Qt Designer有一个很好的方法来解决这个问题,它允许您将按钮分组到一个列表中,然后连接到its以获取单击的按钮

您只需在Qt Designer中选择所有按钮(使用Ctrl+单击),然后右键单击其中一个按钮并选择“分配给按钮组->新建按钮组”。这将创建一个新的按钮组对象,并自动向其中添加所有按钮

重新生成gui模块后,您可以执行以下操作:

ui.radioButtonGroup.buttonClicked.connect(radioButtonClicked)

def radioButtonClicked(button):
    print(button.text())

我来看看,我得出了一个类似的结论,但是,没有使用QtCore.SIGNAL它是用来做什么的?这似乎是最好的选择,我可能会使用它。谢谢好的,更大的问题是,当我使用它时,它会使整个GUI崩溃。我看到一个弹出窗口说python停止工作了。你以前遇到过这个问题吗?使用python 3.5.2和qt5@Haq.H. 您是否使用pyuic重新生成gui模块?如果不是,问题一定出在您自己的代码中。我确实重新生成了新的.py文件,实际上没有错误消息,所以我不知道在哪里查找。如果您想查看它,我只是发布了一篇文章,提供了更多详细信息
ui.radioButtonGroup.buttonClicked.connect(radioButtonClicked)

def radioButtonClicked(button):
    print(button.text())