いくつかの整数を渡すためにカスタムpyqtSignal
を作成しようとしていますが、いくつか問題があります。私は最初の問題を示し、最小の例を提示してみましょう:PyQt5:カスタム信号を使用したときのintオブジェクトの変換が正しくありません
#!/usr/local/bin/python3
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
class Form(QDialog):
post_request = pyqtSignal(int)
def __init__(self, parent=None):
super(Form, self).__init__(parent)
self.button = QPushButton('Click Me')
self.textbox = QLineEdit(self)
layout = QHBoxLayout()
layout.addWidget(self.button)
layout.addWidget(self.textbox)
self.setLayout(layout)
self.button.clicked.connect(self.on_button_click)
self.post_request.connect(self.test)
self.setWindowTitle('Test')
def on_button_click(self):
try:
integer = int(self.textbox.text(), 16)
self.post_request.emit(integer)
except ValueError:
print('wrong input')
def test(self, integer):
print('I received {0:x}'.format(integer))
def run_app():
app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()
if __name__ == '__main__':
run_app()
これは(それが非進文字でない限り)テキストボックスに入力したものは何でも出て出力する簡単なウィンドウです。さて、これはほとんどの場合、大丈夫です。しかし、テキストボックスに最上位ビットが設定されている数値を入力すると、何らかの奇妙な動作をします。私は、テキストボックスに0x4afecafe
を入力し、ボタンをクリックした場合、それが印刷されます:
は、私は次のような出力になります
0xcafecafe
に4afecafe
ますがタイピングを受けた:
を私はC/C++であれば間違ってされていない-35013502
を受けたが、中Pythonでは、これは私のプログラムを壊します。-35013502 == 0xcafecafe
はFalse
を返します。
は、だから私の質問は以下のとおりです。
- ですが、なぜでしょうか? Pythonラッパーの基本的な実装と関係があると思いますが、それを理解できませんでした。
- この問題を回避するにはどうすればよいですか?スロットにPython
int
オブジェクトを受け取るには、0xcafecafe
のオブジェクトが必要です。