diff --git a/desktop/onionshare/__init__.py b/desktop/onionshare/__init__.py
index 72491e7f..e50d430b 100644
--- a/desktop/onionshare/__init__.py
+++ b/desktop/onionshare/__init__.py
@@ -26,10 +26,10 @@ import signal
import json
import psutil
import getpass
-from PySide6 import QtCore, QtWidgets, QtGui
+from qtpy import QtCore, QtWidgets, QtGui
-from PySide6.QtCore import Slot, Qt
-from PySide6.QtGui import QPalette, QColor
+from qtpy.QtCore import Slot, Qt
+from qtpy.QtGui import QPalette, QColor
from onionshare_cli.common import Common
from onionshare_cli.settings import Settings
diff --git a/desktop/onionshare/connection_tab.py b/desktop/onionshare/connection_tab.py
index 452b2b76..99fbde78 100644
--- a/desktop/onionshare/connection_tab.py
+++ b/desktop/onionshare/connection_tab.py
@@ -20,7 +20,7 @@ along with this program. If not, see .
import json
import os
-from PySide6 import QtCore, QtWidgets, QtGui
+from qtpy import QtCore, QtWidgets, QtGui
from onionshare_cli.censorship import (
CensorshipCircumvention,
diff --git a/desktop/onionshare/gui_common.py b/desktop/onionshare/gui_common.py
index fcbf47f7..204d3234 100644
--- a/desktop/onionshare/gui_common.py
+++ b/desktop/onionshare/gui_common.py
@@ -21,7 +21,7 @@ along with this program. If not, see .
import os
import shutil
from pkg_resources import resource_filename
-from PySide6 import QtCore, QtWidgets, QtGui
+from qtpy import QtCore, QtWidgets, QtGui
from . import strings
from onionshare_cli.onion import (
@@ -624,9 +624,11 @@ class ToggleCheckbox(QtWidgets.QCheckBox):
x = (
rect.width() - rect.x() - self.w + 20
) # 20 is the padding between text and toggle
+ x = int(x)
y = (
self.height() / 2 - self.h / 2 + 16
) # 16 is the padding top for the checkbox
+ y = int(y)
self.toggleRect = QtCore.QRect(x, y, self.w, self.h)
painter.setBrush(QtGui.QColor(self.bg_color))
painter.drawRoundedRect(x, y, self.w, self.h, self.h / 2, self.h / 2)
diff --git a/desktop/onionshare/main_window.py b/desktop/onionshare/main_window.py
index 986f8720..c119183c 100644
--- a/desktop/onionshare/main_window.py
+++ b/desktop/onionshare/main_window.py
@@ -20,7 +20,7 @@ along with this program. If not, see .
import os
import time
-from PySide6 import QtCore, QtWidgets, QtGui
+from qtpy import QtCore, QtWidgets, QtGui
from . import strings
from .widgets import Alert
diff --git a/desktop/onionshare/moat_dialog.py b/desktop/onionshare/moat_dialog.py
index 6e33a047..a55ee1a4 100644
--- a/desktop/onionshare/moat_dialog.py
+++ b/desktop/onionshare/moat_dialog.py
@@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
"""
-from PySide6 import QtCore, QtWidgets, QtGui
+from qtpy import QtCore, QtWidgets, QtGui
import requests
import os
import base64
diff --git a/desktop/onionshare/settings_parent_tab.py b/desktop/onionshare/settings_parent_tab.py
index 08815c1d..4369ad72 100644
--- a/desktop/onionshare/settings_parent_tab.py
+++ b/desktop/onionshare/settings_parent_tab.py
@@ -1,4 +1,4 @@
-from PySide6 import QtCore, QtWidgets, QtGui
+from qtpy import QtCore, QtWidgets, QtGui
from onionshare_cli.mode_settings import ModeSettings
diff --git a/desktop/onionshare/settings_tab.py b/desktop/onionshare/settings_tab.py
index ad911412..03cfb816 100644
--- a/desktop/onionshare/settings_tab.py
+++ b/desktop/onionshare/settings_tab.py
@@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
"""
-from PySide6 import QtCore, QtWidgets, QtGui
+from qtpy import QtCore, QtWidgets, QtGui
import platform
import datetime
from onionshare_cli.settings import Settings
diff --git a/desktop/onionshare/tab/mode/__init__.py b/desktop/onionshare/tab/mode/__init__.py
index 34d78cbd..e8344c11 100644
--- a/desktop/onionshare/tab/mode/__init__.py
+++ b/desktop/onionshare/tab/mode/__init__.py
@@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
"""
-from PySide6 import QtCore, QtWidgets
+from qtpy import QtCore, QtWidgets
from onionshare_cli.common import AutoStopTimer
diff --git a/desktop/onionshare/tab/mode/chat_mode/__init__.py b/desktop/onionshare/tab/mode/chat_mode/__init__.py
index cb4f6911..554fb9b6 100644
--- a/desktop/onionshare/tab/mode/chat_mode/__init__.py
+++ b/desktop/onionshare/tab/mode/chat_mode/__init__.py
@@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
"""
-from PySide6 import QtCore, QtWidgets, QtGui
+from qtpy import QtCore, QtWidgets, QtGui
from onionshare_cli.web import Web
diff --git a/desktop/onionshare/tab/mode/file_selection.py b/desktop/onionshare/tab/mode/file_selection.py
index c03ecaa1..ba99e8a9 100644
--- a/desktop/onionshare/tab/mode/file_selection.py
+++ b/desktop/onionshare/tab/mode/file_selection.py
@@ -19,7 +19,7 @@ along with this program. If not, see .
"""
import os
-from PySide6 import QtCore, QtWidgets, QtGui
+from qtpy import QtCore, QtWidgets, QtGui
from ... import strings
from ...widgets import Alert, AddFileDialog
diff --git a/desktop/onionshare/tab/mode/history.py b/desktop/onionshare/tab/mode/history.py
index ad8af099..f4692f7b 100644
--- a/desktop/onionshare/tab/mode/history.py
+++ b/desktop/onionshare/tab/mode/history.py
@@ -22,9 +22,11 @@ import time
import subprocess
import os
from datetime import datetime
-from PySide6 import QtCore, QtWidgets, QtGui
+
+from qtpy import QtCore, QtWidgets, QtGui
from urllib.parse import unquote
+
from ... import strings
from ...widgets import Alert
from ...gui_common import GuiCommon
@@ -122,7 +124,7 @@ class ShareHistoryItem(HistoryItem):
self.progress_bar.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.progress_bar.setAlignment(QtCore.Qt.AlignHCenter)
self.progress_bar.setMinimum(0)
- self.progress_bar.setMaximum(total_bytes / 1024)
+ self.progress_bar.setMaximum(total_bytes // 1024)
self.progress_bar.setValue(0)
self.progress_bar.setStyleSheet(
self.common.gui.css["downloads_uploads_progress_bar"]
@@ -141,7 +143,7 @@ class ShareHistoryItem(HistoryItem):
def update(self, downloaded_bytes):
self.downloaded_bytes = downloaded_bytes
- self.progress_bar.setValue(downloaded_bytes / 1024)
+ self.progress_bar.setValue(downloaded_bytes // 1024)
if (downloaded_bytes / 1024) == (self.progress_bar.total_bytes / 1024):
pb_fmt = strings._("gui_all_modes_progress_complete").format(
self.common.format_seconds(time.time() - self.started)
@@ -393,8 +395,8 @@ class ReceiveHistoryItem(HistoryItem):
total_uploaded_bytes += data["progress"][filename]["uploaded_bytes"]
# Update the progress bar
- self.progress_bar.setMaximum(self.content_length / 1024)
- self.progress_bar.setValue(total_uploaded_bytes / 1024)
+ self.progress_bar.setMaximum(self.content_length // 1024)
+ self.progress_bar.setValue(total_uploaded_bytes // 1024)
elapsed = datetime.now() - self.started
if elapsed.seconds < 10:
@@ -529,7 +531,7 @@ class IndividualFileHistoryItem(HistoryItem):
else:
self.total_bytes = data["filesize"]
self.progress_bar.setMinimum(0)
- self.progress_bar.setMaximum(data["filesize"] / 1024)
+ self.progress_bar.setMaximum(data["filesize"] // 1024)
self.progress_bar.total_bytes = data["filesize"]
# Start at 0
@@ -538,7 +540,7 @@ class IndividualFileHistoryItem(HistoryItem):
def update(self, downloaded_bytes):
self.downloaded_bytes = downloaded_bytes
- self.progress_bar.setValue(downloaded_bytes / 1024)
+ self.progress_bar.setValue(downloaded_bytes // 1024)
if (downloaded_bytes / 1024) == (self.progress_bar.total_bytes / 1024):
self.status_code_label.setText("200")
self.status_code_label.setStyleSheet(
diff --git a/desktop/onionshare/tab/mode/mode_settings_widget.py b/desktop/onionshare/tab/mode/mode_settings_widget.py
index 9a8cd441..315adde5 100644
--- a/desktop/onionshare/tab/mode/mode_settings_widget.py
+++ b/desktop/onionshare/tab/mode/mode_settings_widget.py
@@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
"""
-from PySide6 import QtCore, QtWidgets
+from qtpy import QtCore, QtWidgets
from ... import strings
diff --git a/desktop/onionshare/tab/mode/receive_mode/__init__.py b/desktop/onionshare/tab/mode/receive_mode/__init__.py
index bfa85459..49714a4c 100644
--- a/desktop/onionshare/tab/mode/receive_mode/__init__.py
+++ b/desktop/onionshare/tab/mode/receive_mode/__init__.py
@@ -19,7 +19,7 @@ along with this program. If not, see .
"""
import os
-from PySide6 import QtCore, QtWidgets, QtGui
+from qtpy import QtCore, QtWidgets, QtGui
from onionshare_cli.web import Web
diff --git a/desktop/onionshare/tab/mode/share_mode/__init__.py b/desktop/onionshare/tab/mode/share_mode/__init__.py
index daa35a4d..e7d14aa4 100644
--- a/desktop/onionshare/tab/mode/share_mode/__init__.py
+++ b/desktop/onionshare/tab/mode/share_mode/__init__.py
@@ -19,7 +19,7 @@ along with this program. If not, see .
"""
import os
-from PySide6 import QtCore, QtWidgets, QtGui
+from qtpy import QtCore, QtWidgets, QtGui
from onionshare_cli.common import Common
from onionshare_cli.web import Web
diff --git a/desktop/onionshare/tab/mode/share_mode/threads.py b/desktop/onionshare/tab/mode/share_mode/threads.py
index 77a5cb6c..d8f7e8ef 100644
--- a/desktop/onionshare/tab/mode/share_mode/threads.py
+++ b/desktop/onionshare/tab/mode/share_mode/threads.py
@@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
"""
-from PySide6 import QtCore
+from qtpy import QtCore
class CompressThread(QtCore.QThread):
diff --git a/desktop/onionshare/tab/mode/website_mode/__init__.py b/desktop/onionshare/tab/mode/website_mode/__init__.py
index 47614cae..c2320222 100644
--- a/desktop/onionshare/tab/mode/website_mode/__init__.py
+++ b/desktop/onionshare/tab/mode/website_mode/__init__.py
@@ -20,7 +20,7 @@ along with this program. If not, see .
import os
-from PySide6 import QtCore, QtWidgets, QtGui
+from qtpy import QtCore, QtWidgets, QtGui
from onionshare_cli.common import Common
from onionshare_cli.web import Web
diff --git a/desktop/onionshare/tab/server_status.py b/desktop/onionshare/tab/server_status.py
index 185033c4..79be25cb 100644
--- a/desktop/onionshare/tab/server_status.py
+++ b/desktop/onionshare/tab/server_status.py
@@ -18,8 +18,8 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
"""
import textwrap
-from PySide6 import QtCore, QtWidgets, QtGui
-from PySide6.QtCore import Qt
+from qtpy import QtCore, QtWidgets, QtGui
+from qtpy.QtCore import Qt
from .. import strings
from ..widgets import Alert
diff --git a/desktop/onionshare/tab/tab.py b/desktop/onionshare/tab/tab.py
index ab6cc3e5..766a381e 100644
--- a/desktop/onionshare/tab/tab.py
+++ b/desktop/onionshare/tab/tab.py
@@ -19,7 +19,7 @@ along with this program. If not, see .
"""
import queue
-from PySide6 import QtCore, QtWidgets, QtGui
+from qtpy import QtCore, QtWidgets, QtGui
from onionshare_cli.onionshare import OnionShare
from onionshare_cli.web import Web
@@ -69,11 +69,11 @@ class NewTabButton(QtWidgets.QPushButton):
self.title_label.setStyleSheet(self.common.gui.css["new_tab_title_text"])
if self.title_label.sizeHint().width() >= 250:
self.title_label.setGeometry(
- (self.width() - 250) / 2, self.height() - 120, 250, 60
+ (self.width() - 250) // 2, self.height() - 120, 250, 60
)
else:
self.title_label.setGeometry(
- (self.width() - 250) / 2, self.height() - 100, 250, 30
+ (self.width() - 250) // 2, self.height() - 100, 250, 30
)
self.title_label.show()
@@ -82,7 +82,7 @@ class NewTabButton(QtWidgets.QPushButton):
self.text_label.setAlignment(QtCore.Qt.AlignCenter)
self.text_label.setStyleSheet(self.common.gui.css["new_tab_button_text"])
self.text_label.setGeometry(
- (self.width() - 200) / 2, self.height() - 50, 200, 30
+ (self.width() - 200) // 2, self.height() - 50, 200, 30
)
self.text_label.show()
diff --git a/desktop/onionshare/tab_widget.py b/desktop/onionshare/tab_widget.py
index 2a867ba5..29a68f34 100644
--- a/desktop/onionshare/tab_widget.py
+++ b/desktop/onionshare/tab_widget.py
@@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
"""
-from PySide6 import QtCore, QtWidgets, QtGui
+from qtpy import QtCore, QtWidgets, QtGui
from onionshare_cli.mode_settings import ModeSettings
diff --git a/desktop/onionshare/threads.py b/desktop/onionshare/threads.py
index 6eeeb97f..4386d33f 100644
--- a/desktop/onionshare/threads.py
+++ b/desktop/onionshare/threads.py
@@ -21,7 +21,7 @@ along with this program. If not, see .
import time
import json
import os
-from PySide6 import QtCore
+from qtpy import QtCore
from onionshare_cli.onion import (
TorErrorInvalidSetting,
diff --git a/desktop/onionshare/tor_connection.py b/desktop/onionshare/tor_connection.py
index f87967ef..7021189c 100644
--- a/desktop/onionshare/tor_connection.py
+++ b/desktop/onionshare/tor_connection.py
@@ -19,7 +19,7 @@ along with this program. If not, see .
"""
import time
-from PySide6 import QtCore, QtWidgets
+from qtpy import QtCore, QtWidgets
from onionshare_cli.onion import (
BundledTorCanceled,
diff --git a/desktop/onionshare/tor_settings_tab.py b/desktop/onionshare/tor_settings_tab.py
index a7aa4bbb..22f974fc 100644
--- a/desktop/onionshare/tor_settings_tab.py
+++ b/desktop/onionshare/tor_settings_tab.py
@@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
"""
-from PySide6 import QtCore, QtWidgets, QtGui
+from qtpy import QtCore, QtWidgets, QtGui
import sys
import platform
import os
diff --git a/desktop/onionshare/update_checker.py b/desktop/onionshare/update_checker.py
index e40a8c77..3bd6412b 100644
--- a/desktop/onionshare/update_checker.py
+++ b/desktop/onionshare/update_checker.py
@@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
"""
-from PySide6 import QtCore
+from qtpy import QtCore
import datetime
import re
import socks
diff --git a/desktop/onionshare/widgets.py b/desktop/onionshare/widgets.py
index 2eacc771..e2f101d1 100644
--- a/desktop/onionshare/widgets.py
+++ b/desktop/onionshare/widgets.py
@@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
"""
-from PySide6 import QtCore, QtWidgets, QtGui
+from qtpy import QtCore, QtWidgets, QtGui
import qrcode
from . import strings
diff --git a/desktop/tests/conftest.py b/desktop/tests/conftest.py
index 73517e62..5d1e562d 100644
--- a/desktop/tests/conftest.py
+++ b/desktop/tests/conftest.py
@@ -2,7 +2,7 @@ import sys
import os
from datetime import datetime, timedelta
-from PySide6 import QtTest
+from qtpy import QtTest
# Force tests to look for resources in the source code tree
diff --git a/desktop/tests/gui_base_test.py b/desktop/tests/gui_base_test.py
index af391a0d..d2a24d04 100644
--- a/desktop/tests/gui_base_test.py
+++ b/desktop/tests/gui_base_test.py
@@ -7,7 +7,7 @@ import secrets
import platform
import sys
-from PySide6 import QtCore, QtTest, QtWidgets
+from qtpy import QtCore, QtTest, QtWidgets
from onionshare_cli.common import Common
diff --git a/desktop/tests/test_gui_chat.py b/desktop/tests/test_gui_chat.py
index 1b5e4e6d..9f7365b7 100644
--- a/desktop/tests/test_gui_chat.py
+++ b/desktop/tests/test_gui_chat.py
@@ -1,6 +1,6 @@
import requests
-from PySide6 import QtTest
+from qtpy import QtTest
from .gui_base_test import GuiBaseTest
diff --git a/desktop/tests/test_gui_receive.py b/desktop/tests/test_gui_receive.py
index 11f2d609..5136c70c 100644
--- a/desktop/tests/test_gui_receive.py
+++ b/desktop/tests/test_gui_receive.py
@@ -6,7 +6,7 @@ import shutil
import sys
from datetime import datetime, timedelta
-from PySide6 import QtCore, QtTest
+from qtpy import QtCore, QtTest
from .gui_base_test import GuiBaseTest
diff --git a/desktop/tests/test_gui_share.py b/desktop/tests/test_gui_share.py
index f0c460f2..cf13efc3 100644
--- a/desktop/tests/test_gui_share.py
+++ b/desktop/tests/test_gui_share.py
@@ -3,7 +3,7 @@ import requests
import tempfile
import zipfile
-from PySide6 import QtCore, QtTest
+from qtpy import QtCore, QtTest
from .gui_base_test import GuiBaseTest
diff --git a/desktop/tests/test_gui_tabs.py b/desktop/tests/test_gui_tabs.py
index b0e24666..92dae1ad 100644
--- a/desktop/tests/test_gui_tabs.py
+++ b/desktop/tests/test_gui_tabs.py
@@ -1,6 +1,6 @@
import os
-from PySide6 import QtCore, QtTest, QtWidgets
+from qtpy import QtCore, QtTest, QtWidgets
from .gui_base_test import GuiBaseTest
diff --git a/desktop/tests/test_gui_website.py b/desktop/tests/test_gui_website.py
index 80093553..9f9ffa29 100644
--- a/desktop/tests/test_gui_website.py
+++ b/desktop/tests/test_gui_website.py
@@ -1,6 +1,6 @@
import requests
-from PySide6 import QtTest
+from qtpy import QtTest
from .gui_base_test import GuiBaseTest