일부 정수를 전달하기 위해 사용자 정의 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
하지만 입력을받은 :
를내가받은 -35013502
즉 C/C++ 인 경우 잘못되지
만에 파이썬은 내 프로그램을 깨뜨린다. -35013502 == 0xcafecafe
은 False
을 리턴한다.
그래서 제 질문은 다음과 같습니다
- 왜 이런 일이? 파이썬 랩퍼의 기본 구현과 관련이 있다고 생각하지만 이해할 수는 없습니다.
- 이 문제를 해결하려면 어떻게해야합니까? 슬롯에 파이썬
int
객체를 받도록하고 싶습니다.0xcafecafe
.