Почему содержимое словаря меняется при передаче данных словаря с использованием сигналов и слотов в PySide6?Python

Программы на Python
Ответить
Anonymous
 Почему содержимое словаря меняется при передаче данных словаря с использованием сигналов и слотов в PySide6?

Сообщение Anonymous »

Когда я использую PySide6, я передаю словарь через сигнал, но данные словаря, которые я получаю в функции слота, изменяются. Сам контент не меняется, но меняется порядок ключей в словаре. Разве словари в новых версиях Python не должны быть упорядочены?

Код: Выделить всё

from PySide6.QtCore import Signal
from PySide6.QtWidgets import QWidget, QVBoxLayout, QPushButton

class Btn(QWidget):

pressed = Signal(dict)

def __init__(self):
super().__init__()
self.setWindowTitle("Test Button")
self.setGeometry(100, 100, 200, 100)

layout = QVBoxLayout()
self.setLayout(layout)

btn = QPushButton("Press Me")
layout.addWidget(btn)

btn.clicked.connect(self.on_press)

def on_press(self):
d = {"R": [1, 2, 3], "G": [4, 5, 6], "B": [7, 8, 9]}
self.pressed.emit(d)

class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Test Plugin Window")
self.setGeometry(100, 100, 400, 300)

layout = QVBoxLayout()
self.setLayout(layout)

btn = Btn()
layout.addWidget(btn)

btn.pressed.connect(self.on_click)

def on_click(self, d):
print(d)

if __name__ == '__main__':
from PySide6.QtWidgets import QApplication
import sys

app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec())
Результат, который я ожидал, был {"R": [1, 2, 3], "G": [4, 5, 6], "B": [7, 8, 9], но окончательный результат был {'B': [7, 8, 9], 'G': [4, 5, 6], 'R': [1, 2, 3].
Однако, когда я изменил слот (сигнал) на нажатый = Сигнал(объект), поведение стало именно таким, как ожидалось. Почему это?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ta-using-s
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»