2017-01-25 3 views
0

Недавно я начал использовать qt для создания графического интерфейса python. У меня есть две проблемы, которые я не могу найти. приведенный ниже код является образцом того, что мне нужно построить.Qt Designer UI (python) для JSON

1: Проверьте, какая радиокнопка из списка переключателей в вертикальном макете была нажата. В графическом интерфейсе он выбирает только одну радиокнопку из всех остальных доступных в макете. Как я вижу, что было нажато?

2: Я хотел бы добавить значение clicked к объекту 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_()) 

ответ

0

Существует хороший способ решить это с помощью Qt Designer, который позволяет вы можете сгруппировать свои кнопки в QButtonGroup, а затем подключитесь к своему buttonClicked signal, чтобы получить кнопку, на которую была нажата кнопка.

Все, что вам нужно сделать, - в Qt Designer выбрать все кнопки (с помощью Ctrl + клик), затем щелкнуть правой кнопкой мыши по одной из кнопок и выбрать команду «Присвоить группе кнопок -> Новая группа кнопок». Это создаст новый объект группы кнопок и автоматически добавит к нему все кнопки.

После повторной генерации вашего модуля графического интерфейса, вы можете сделать somehting так:

ui.radioButtonGroup.buttonClicked.connect(radioButtonClicked) 

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

кажется, что это лучший вариант, и это то, что я, вероятно, буду использовать. Благодаря! –

+0

хорошо, так что большая проблема, когда я использую это, он выдает весь графический интерфейс. Я получаю всплывающее высказывание, что python перестает работать. Вы столкнулись с этой проблемой раньше? Работает в python 3.5.2 и qt5 –

+0

@ Haq.H. Вы повторно создали модуль gui с pyuic? Если нет, проблема должна быть где-то в вашем собственном коде. – ekhumoro

0

Я думаю, что нужно что-то вроде этого (не проверено)

# Set Default 
self.thi.setChecked(True) 

# create a signal 
QtCore.QObject.connect(self.that, 
         QtCore.SIGNAL("toggled(bool)"), 
         self.radio_clicked) 

затем создать функцию

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

Я буду смотреть, я пришел к такому же заключению однако, без использования QtCore.SIGNAL, что он используется для? –

Смежные вопросы