1

チェックされたときにラジオボタンに値を割り当てたい。

def radiobutton8(self):
    if self.radioButton_8.isChecked():
        self.radioButton_8 = 02

ただし、これは機能しません。解決策はありますか?

更新:私のコードは次のように編集されました:

class MyRadioButton(QtGui.QRadioButton):
    def __init__(self):
        super(MyRadioButton, self).__init__()
        self.value = None

    def SetValue(self, val):
        self.value = val

    def GetValue(self):
        return self.value

class UserTool(QtGui.QDialog):
    def setup(self, Dialog):
                          ...
        self.radioButton_8.toggled.connect(self.radiobutton8)

    def retranslateUi(self, Dialog):
                          ...
        self.radioButton_8 = MyRadioButton()
        self.radioButton_8.setText(_translate("Dialog", "A1", None))

def radiobutton8(self):
    if self.radioButton_8.isChecked():
        value = self.radioButton_8.setValue("02")
        self.lcdNumber.display(value)

ただし、ラジオ ボタンの元のテキスト 'A1' が表示されなくなり、チェックしても自分の番号が LCD に表示されません。理由はありますか?

更新: コードを次のように編集しました。

class MyRadioButton(QtGui.QRadioButton):
    def __init__(self):
        super(MyRadioButton, self).__init__()
        self.value = None

    def SetValue(self, val):
        self.value = val

    def GetValue(self):
        return self.value

class UserTool(QtGui.QDialog):
    def setup(self, Dialog):
                  ...
        self.lcdNumber = QtGui.QLCDNumber(Dialog)
        self.lcdNumber.setGeometry(QtCore.QRect(590, 10, 71, 23))
        self.lcdNumber.setFrameShadow(QtGui.QFrame.Raised)
        self.lcdNumber.setObjectName(_fromUtf8("lcdNumber"))
        self.lcdNumber.setStyleSheet("* {background-color: black; color: white;}")
        self.lcdNumber.display('00')

        self.radioButton_8 = QtGui.QRadioButton(Dialog)
        self.radioButton_8.setGeometry(QtCore.QRect(460, 10, 82, 17))
        self.radioButton_8.setChecked(False)
        self.radioButton_8.setAutoExclusive(False)
        self.radioButton_8.setObjectName(_fromUtf8("radioButton_8")) 
        self.radioButton_8 = MyRadioButton()
        self.radioButton_8.setText("A1")
        self.radioButton_8.setValue(02)
        self.radioButton_8.toggled.connect(self.showValueFromRadioButtonToLCDNumber)

    def showValueFromRadioButtonToLCDNumber(self):
        value = self.radioButton_8.GetValue()
        if self.radioButton_8.isChecked():
            self.lcdNumber.display(value)

そして今、私はこのエラーがあります:

Traceback (most recent call last):
  File "C:/Users/Vivien Phua/Documents/Python Scripts/Rs232.py", line 303, in handleOpenWidget
    self.popup = UserTool()
  File "C:/Users/Vivien Phua/Documents/Python Scripts/Rs232.py", line 39, in __init__
    self.setup(self)
  File "C:/Users/Vivien Phua/Documents/Python Scripts/Rs232.py", line 153, in setup
    self.radioButton_8.setValue(02)
AttributeError: 'MyRadioButton' object has no attribute 'setValue'

提供されたコードも試してみましたが、そのようなエラーはありませんが、コードの LCD には値 02 が表示されません。

4

1 に答える 1

1

radioButton の横にあるテキスト値のことですか? もしそうなら、ここに解決策があります:

def radiobutton8(self):
    if self.radioButton_8.isChecked():
        self.radioButton_8.setText("02")

EDIT1 : radioButton には、必要に応じて値フィールドがありません。ただし、元の QRadioButton を継承する独自の radiobButton クラスを作成し、そのフィールドを追加することができます。例:

class MyRadioButton(QtGui.QRadioButton):
    def __init__(self):
        super(MyRadioButton, self).__init__()
        self.value = None

    def SetValue(self, val):
        self.value = val

    def GetValue(self):
        return self.value

次のように使用します。

self.radioButton_8 = MyRadioButton()
self.radioButton_8.setText("some text")
...
def radiobutton8(self):
    if self.radioButton_8.isChecked():
        self.radioButton_8.SetValue("02")# or .SetValue(2) if you want it to be integer

EDIT2

# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import Qt

class MyRadioButton(QtGui.QRadioButton):
    def __init__(self):
        super(MyRadioButton, self).__init__()
        self.value = None

    def SetValue(self, val):
        self.value = val

    def GetValue(self):
        return self.value

class Widget(QtGui.QWidget):
    def __init__(self):
        super(Widget, self).__init__()
        self.layout = QtGui.QVBoxLayout(self)

        self.pushButton_7 = QtGui.QPushButton("if RB is checked, show it's value to LCD")
        self.pushButton_7.setGeometry(QtCore.QRect(220, 650, 75, 23))
        self.pushButton_7.clicked.connect(self.showValueFromRadioButtonToLCDNumber)

        self.radioButton = MyRadioButton()
        self.radioButton.setText("some text")
        self.radioButton.SetValue("02")# somewhere in code first set value to radio button

        self.lcdNumber = QtGui.QLCDNumber()

        self.layout.addWidget(self.pushButton_7)
        self.layout.addWidget(self.radioButton)
        self.layout.addWidget(self.lcdNumber)

    def showValueFromRadioButtonToLCDNumber(self):
        value = self.radioButton.GetValue()
        if self.radioButton.isChecked():
            self.lcdNumber.display(value)

if __name__ == '__main__':
    app = QtGui.QApplication([])
    w = Widget()
    w.show()
    sys.exit(app.exec_())
于 2014-07-16T09:38:02.890 に答える