Передвижение безрамочного окна PySide6
У меня есть код, который передвигает появившееся окно, но как этот код подключить к другому окну, которое появляется после первого? Мой код находится здесь https://gist.github.com/tR1nZ/4715ccfd33027addf5e7cf00934df63e
Ответы (1 шт):
НИКОГДА НЕ ИЗМЕНЯЙТЕ код, сгенерированный Qt Designer, НИКОГДА!
Создайте другой класс, который наследуется от соответствующего виджета
и используйте созданный класс для его заполнения.
И я вам уже раз писал об этом в вашем вопросе Помощь с передвижением безрамочного окна в PySide6 . Почему вы не отвечаете на мои комментарии в нем ?
Ваше полное приложение с формами очень большое, поэтому в моем ответе не будет формы, которые содержатся в class Ui_MainWindow(object):
и части формы, которые содержатся в class Ui_Form(object):.
import sys
import os
import subprocess
import requests
from PyQt5 import QtCore, QtGui, QtWidgets # !!! ваши импорты для PySide6
from PyQt5.Qt import * # !!! ваши импорты для PySide6
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
# ... сюда вставьте <----<----<----<----<----
# !!! TaskWidget
class TaskWidget(QWidget):
''' Signal для PySide6 !!!!!!!!!!!!
itemDeleted = Signal(QListWidgetItem)
itemEdited = Signal(QListWidgetItem)
itemStarted = Signal(QListWidgetItem)
itemStopped = Signal(QListWidgetItem)
'''
# установите свое ^^^^^^
# уберите мое vvvvvvvvvv
# pyqtSignal для PyQt5 !!!!!!!!!!!!
itemDeleted = pyqtSignal(QListWidgetItem)
itemEdited = pyqtSignal(QListWidgetItem)
itemStarted = pyqtSignal(QListWidgetItem)
itemStopped = pyqtSignal(QListWidgetItem)
def __init__(self, item, data, *args, **kwargs):
super(TaskWidget, self).__init__(*args, **kwargs)
self._item = item
self.num_row = QLabel(self)
self.num_row.setObjectName(u"num_row")
self.num_row.setGeometry(QRect(9, 9, 24, 24))
self.num_row.setAlignment(Qt.AlignCenter)
self.site_row = QLabel(self)
self.site_row.setObjectName(u"site_row")
self.site_row.setGeometry(QRect(50, 9, 91, 24))
self.product_row = QLabel(self)
self.product_row.setObjectName(u"product_row")
self.product_row.setGeometry(QRect(150, 9, 161, 24))
self.size_row = QLabel(self)
self.size_row.setObjectName(u"size_row")
self.size_row.setGeometry(QRect(330, 9, 61, 24))
self.profile_row = QLabel(self)
self.profile_row.setObjectName(u"profile_row")
self.profile_row.setGeometry(QRect(405, 9, 81, 24))
self.proxy_row = QLabel(self)
self.proxy_row.setObjectName(u"proxy_row")
self.proxy_row.setGeometry(QRect(500, 9, 60, 24))
self.status_row = QLabel(self)
self.status_row.setObjectName(u"status_row")
self.status_row.setGeometry(QRect(580, 9, 191, 24))
self.status_row.setAlignment(Qt.AlignCenter)
self.start_row = QPushButton(self)
self.start_row.setObjectName(u"start_row")
self.start_row.setGeometry(QRect(781, 6, 26, 26))
icon1 = QIcon()
icon1.addFile(u"img/start.png", QSize(), QIcon.Normal, QIcon.Off)
self.start_row.setIcon(icon1)
self.start_row.setIconSize(QSize(26, 26))
self.stop_row = QPushButton(self)
self.stop_row.setObjectName(u"stop_row")
self.stop_row.setGeometry(QRect(820, 6, 26, 26))
icon2 = QIcon()
icon2.addFile(u"img/stop.png", QSize(), QIcon.Normal, QIcon.Off)
self.stop_row.setIcon(icon2)
self.stop_row.setIconSize(QSize(26, 26))
self.edit_row = QPushButton(self)
self.edit_row.setObjectName(u"edit_row")
self.edit_row.setGeometry(QRect(860, 6, 26, 26))
icon3 = QIcon()
icon3.addFile(u"img/pen.png", QSize(), QIcon.Normal, QIcon.Off)
self.edit_row.setIcon(icon3)
self.edit_row.setIconSize(QSize(26, 26))
self.delete_row = QPushButton(self)
self.delete_row.setObjectName(u"delete_row")
self.delete_row.setGeometry(QRect(900, 6, 26, 26))
self.start_row.clicked.connect(self.startItem)
self.stop_row.clicked.connect(self.stopItem)
self.delete_row.clicked.connect(self.deleteItem)
self.edit_row.clicked.connect(self.editItem)
icon4 = QIcon()
icon4.addFile(u"img/trash.png", QSize(), QIcon.Normal, QIcon.Off)
self.delete_row.setIcon(icon4)
self.delete_row.setIconSize(QSize(26, 26))
self.num_row.setText(QCoreApplication.translate("MainWindow", data['num'], None))
self.site_row.setText(QCoreApplication.translate("MainWindow", data['site'], None))
self.product_row.setText(QCoreApplication.translate("MainWindow", data['product'], None))
self.size_row.setText(QCoreApplication.translate("MainWindow", data['size'], None))
self.profile_row.setText(QCoreApplication.translate("MainWindow", data['profile'], None))
self.proxy_row.setText(QCoreApplication.translate("MainWindow", data['proxy'], None))
self.status_row.setText(QCoreApplication.translate("MainWindow", data['status'], None))
self.status_row.setStyleSheet(f"color: {data['color']}")
def deleteItem(self):
self.itemDeleted.emit(self._item)
def editItem(self):
self.itemEdited.emit(self._item)
def startItem(self):
self.itemStarted.emit(self._item)
def stopItem(self):
self.itemStopped.emit(self._item)
class Ui_Form(object):
# ... сюда вставьте <----<----<----<----<----<----<----
def retranslateUi(self, Form):
Form.setWindowTitle(QCoreApplication.translate("Form", u"Centurion AIO", None))
self.left_back.setText("")
self.right_back.setText("")
self.enter_your_label.setText(QCoreApplication.translate("Form", u"Enter your license key:", None))
self.response_text.setText(QCoreApplication.translate("Form", u"", None))
self.input_key.setPlaceholderText(QCoreApplication.translate("Form", u"license key", None))
try:
with open('upls\key.txt', 'r') as key:
key1 = key.readlines()[0]
except:
pass
else:
self.input_key.setText(QCoreApplication.translate("Form", str(key1), None))
self.loginButton.setText(QCoreApplication.translate("Form", u"Log In", None))
self.exit_button.setText(QCoreApplication.translate("Form", u"X", None))
class MoveStartWindow(QtWidgets.QWidget, Ui_Form):
def __init__(self):
super().__init__()
self.setupUi(self)
self.setWindowFlags(Qt.FramelessWindowHint)
self.setAttribute(Qt.WA_TranslucentBackground)
self.old_pos = None
self.exit_button.clicked.connect(lambda: self.close())
self.loginButton.clicked.connect(self.check_status)
def check_status(self):
print(self.input_key.text())
self.main_window()
def get_id(self):
current_machine_id = str(subprocess.check_output('wmic csproduct get uuid'), 'utf-8').split('\n')[1].strip()
return current_machine_id
def main_window(self):
headers = {
'Content-type': 'application/json'
}
data = {
"key": self.input_key.text(),
"device": self.get_id(),
"id": "604a002dd52644b19441776d",
}
r = requests.post(
'https://api.cactusweb.io/api/v1/devices',
headers=headers,
json=data
)
if r.status_code == 400:
self.response_text.setStyleSheet(u"color: rgb(255, 0, 0);")
self.response_text.setText(QCoreApplication.translate("Form", u"Access Denied", None))
elif r.status_code == 202:
self.response_text.setStyleSheet(u"color: rgb(0, 170, 0);")
self.response_text.setText(QCoreApplication.translate("Form", u"Logged succsefully", None))
os.system('cls')
elif r.status_code == 200:
self.response_text.setStyleSheet(u"color: rgb(0, 170, 0);")
self.response_text.setText(QCoreApplication.translate("Form", u"Logged succsefully", None))
# Create the Qt Application
self.main_form = QMainWindow()
# Create and show the form
license_key_not_found = False
try:
with open('upls\key.txt', 'r') as lickey:
lickey1 = lickey.readlines()
license_key = lickey1[0]
if license_key != self.input_key.text():
write_key = open('upls\key.txt', 'w')
write_key.write(self.input_key.text())
write_key.close()
except:
license_key_not_found = True
write_key = open('upls\key.txt', 'w')
write_key.write(self.input_key.text())
write_key.close()
# self.mainWindow = Ui_MainWindow()
# self.mainWindow.setupUi(self.main_form)
# self.main_form.show()
self.mainWindow = MainWindow() # +++
self.mainWindow.show() # +++
self.hide() # +++
os.system('cls')
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.old_pos = event.pos()
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
self.old_pos = None
def mouseMoveEvent(self, event):
if not self.old_pos:
return
delta = event.pos() - self.old_pos
self.move(self.pos() + delta)
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): # !!!
def __init__(self):
super().__init__()
self.setupUi(self) # !!!
self.tabs_widget.setCurrentIndex(1)
# ??? self.pos = self.pos()
self.setWindowFlags(Qt.FramelessWindowHint)
self.setAttribute(Qt.WA_TranslucentBackground)
self.exit_button.clicked.connect(lambda: self.close())
self.hide_button.clicked.connect(lambda: self.showMinimized())
# self.app_core(self)
self.app_core()
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.old_pos = None
# вызывается при нажатии кнопки мыши
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.old_pos = event.pos()
# вызывается при отпускании кнопки мыши
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
self.old_pos = None
# вызывается всякий раз, когда мышь перемещается
def mouseMoveEvent(self, event):
if not self.old_pos:
return
delta = event.pos() - self.old_pos
self.move(self.pos() + delta)
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
def app_core(self):
# ??? self.pos = self.pos()
self.tasks_num = 0
self.set_containers()
self.update_comboboxes('proxy')
self.update_comboboxes('profiles')
self.task_creator.clicked.connect(lambda: self.tabs_widget.setCurrentIndex(0))
self.tasks.clicked.connect(lambda: self.tabs_widget.setCurrentIndex(1))
self.billing.clicked.connect(self.show_profiles_tab)
self.proxies.clicked.connect(self.show_proxy_tab)
self.settings.clicked.connect(self.show_settings_tab)
self.save_settings_button.clicked.connect(self.save_settings)
self.create_proxy_button.clicked.connect(self.add_proxy)
self.create_profile_button.clicked.connect(self.add_profile)
# self.test_webhook_button.clicked.connect(self.send_test_webhook)
self.add_taskBtn.clicked.connect(self.add_task)
self.enter_site_combo.currentTextChanged.connect(self.check_combobox)
def start_task(self, item):
for i in self.tasks_container:
if self.tasks_container[i]['item'] == item:
data = self.tasks_container[i]
break
if data['site'] == 'Aliexpress':
self.active_tasks.append((item, Aliexpress(data, self.settings_container)))
elif data['site'] == 'Basketshop':
self.active_tasks.append((item, Basketshop(data, self.settings_container)))
elif data['site'] == 'Svyaznoy':
self.active_tasks.append((item, Svyaznoy(data, self.settings_container)))
elif data['site'] == 'Sneakerhead':
self.active_tasks.append((item, Sneakerhead(data, self.settings_container)))
elif data['site'] == 'Brandshop':
self.active_tasks.append((item, Brandshop(data, self.settings_container)))
elif data['site'] == 'Wildberries':
self.active_tasks.append((item, WbBot(data, self.settings_container)))
elif data['site'] == 'BrandshopAccGen':
self.active_tasks.append((item, BrandshopAccGen(data, self.settings_container)))
elif data['site'] == 'BeliefMoscow':
self.active_tasks.append((item, BeliefMoscow(data, self.settings_container)))
elif data['site'] == 'EldoradoFormReg':
print(1)
# self.active_tasks.append((item, EldoradoFormReg(data, self.settings_container)))
else:
print(data['site'])
self.active_tasks[-1][1].send_status.connect(lambda info: self.set_status(info, i))
self.active_tasks[-1][1].stop_task.connect(self.stop_task)
self.active_tasks[-1][1].setTerminationEnabled(True)
self.active_tasks[-1][1].start()
def set_status(self, info: dict, i):
data = self.tasks_container[i]
data['status'] = info['status']
data['color'] = info['color']
self.change_data(i, data)
def stop_task(self, item):
try:
self.active_tasks[-1][1].stop()
except:
pass
for i in self.tasks_container:
if self.tasks_container[i]['item'] == item:
break
for j in range(len(self.active_tasks)):
if self.active_tasks[j] == item:
break
self.active_tasks.pop(j)
info = {'status': 'Stop', 'color': 'red'}
self.set_status(info, i)
def add_proxy(self):
data = dict()
self.proxies_container[self.proxy_input.toPlainText()] = data
self.update_comboboxes('proxy')
self.create_proxy_indicator.show()
def check_combobox(self):
data = dict()
data['site'] = self.enter_site_combo.currentText()
if data['site'] == "Aliexpress":
data['cookie'] = self.enter_cookie_combo.hide()
data['cookie'] = self.enter_cookie_label.hide()
data['size'] = self.enter_size_combo.hide()
data['size'] = self.enter_size_label.hide()
data['test'] = self.enter_test_input.hide()
data['test'] = self.enter_test_label.hide()
self.size_frame.setMinimumSize(QSize(0, 0))
self.size_frame.setMaximumSize(QSize(0, 0))
self.cookie_frame.setMinimumSize(QSize(0, 0))
self.cookie_frame.setMaximumSize(QSize(0, 0))
elif data['site'] == "Basketshop":
data['test'] = self.enter_test_input.hide()
data['test'] = self.enter_test_label.hide()
data['cookie'] = self.enter_cookie_combo.show()
data['cookie'] = self.enter_cookie_label.show()
data['size'] = self.enter_size_combo.show()
data['size'] = self.enter_size_label.show()
self.size_frame.setMinimumSize(QSize(944, 70))
self.size_frame.setMaximumSize(QSize(944, 70))
self.cookie_frame.setMinimumSize(QSize(944, 60))
self.cookie_frame.setMaximumSize(QSize(944, 60))
elif data['site'] == "Svyaznoy":
data['test'] = self.test_frame.show()
data['test'] = self.enter_test_input.show()
data['test'] = self.enter_test_label.show()
def add_profile(self):
data = dict()
if self.profile_name_input.text() != '':
self.profiles_container[self.profile_name_input.text()] = data
self.update_comboboxes('profiles')
if self.skip1_name_input.text() != '':
self.skip_container[self.skip1_name_input.text()] = data
self.update_comboboxes('skips')
if self.cookie1_name_input.text() != '':
self.cookie_container[self.cookie1_name_input.text()] = data
self.update_comboboxes('cookie')
self.create_profile_indicator.show()
"""def send_test_webhook(self):
embed1 = Webhook(self.settings_container['webhook'], color=0x6dff1f)
embed1.set_footer(text='Centurion AIO ©', ts=False)
embed1.post()"""
def save_settings(self):
self.settings_container['webhook'] = self.webhook_input.text()
self.settings_container['2captcha'] = self.captcha_input.text()
self.settings_container['onlinesim'] = self.onlinesim_input.text()
f = open('upl\settings.txt', 'w')
f.close()
with open('upl\settings.txt', 'a') as e:
e.write(self.settings_container['webhook'] + '\n' + self.settings_container['2captcha'] + '\n' +
self.settings_container['onlinesim'])
self.save_indicator.show()
def add_task(self):
data = dict()
self.tasks_num += 1
data['num'] = str(self.tasks_num)
data['site'] = self.enter_site_combo.currentText()
data['profile'] = self.enter_profile_combo.currentText()
data['product'] = self.enter_product_input.text()
data['size'] = self.enter_size_combo.text()
data['skip'] = self.enter_skip_combo.currentText()
data['cookie'] = self.enter_cookie_combo.currentText()
data['test'] = self.enter_test_input.text()
if data['size'] == '':
data['size'] = 'No Size'
data['proxy'] = self.proxy_input.toPlainText()
data['keyword'] = self.enter_keyword_input.text()
item = QListWidgetItem(self.listWidget)
item.setSizeHint(QSize(944, 40))
data['item'] = item
print(data['item'])
data['color'] = 'red'
data['status'] = 'Stop'
# !!! TaskWidget
widget = TaskWidget(item, data)
widget.itemDeleted.connect(self.deleteTask)
widget.itemEdited.connect(self.editTask)
widget.itemStarted.connect(self.start_task)
widget.itemStopped.connect(self.stop_task)
# Binding delete signal
self.listWidget.setItemWidget(item, widget)
self.tasks_container[self.tasks_num] = data
del data
def deleteTask(self, item):
self.tasks_num -= 1
row = self.listWidget.indexFromItem(item).row()
item = self.listWidget.takeItem(row)
self.listWidget.removeItemWidget(item)
del item
def editTask(self, item):
for t in self.tasks_container:
if self.tasks_container[t]['item'] == item:
break
dialog = Ui_Dialog(self.tasks_container[t], self.profiles_container, self.proxies_container,
self.skip_container, self.cookie_container)
dialog.itemEdit.connect(lambda data: self.change_data(t, data))
center = QScreen.availableGeometry(QApplication.primaryScreen()).center()
dialog.move(center.x() - 400, center.y() - 275)
if dialog.exec() == QDialog.Accepted:
print('edited')
else:
print('cancelled')
def change_data(self, i, data):
row = self.listWidget.indexFromItem(data['item']).row()
item = self.listWidget.takeItem(row)
self.listWidget.removeItemWidget(item)
self.listWidget.insertItem(row, data['item'])
# !!! TaskWidget
widget = TaskWidget(data['item'], data)
widget.itemDeleted.connect(self.deleteTask)
widget.itemEdited.connect(self.editTask)
widget.itemStarted.connect(self.start_task)
widget.itemStopped.connect(self.stop_task)
self.listWidget.setItemWidget(data['item'], widget)
self.tasks_container[i] = data
def update_comboboxes(self, tab):
if tab == 'profiles':
names = list(self.profiles_container.keys())
count = self.enter_profile_combo.count()
for i in range(count):
self.enter_profile_combo.removeItem(0)
for i in range(len(names)):
self.enter_profile_combo.addItem(names[i])
elif tab == 'skips':
names = list(self.skip_container.keys())
count = self.enter_skip_combo.count()
for i in range(count):
self.enter_skip_combo.removeItem(0)
for i in range(len(names)):
self.enter_skip_combo.addItem(names[i])
elif tab == 'cookie':
names = list(self.cookie_container.keys())
count = self.enter_cookie_combo.count()
for i in range(count):
self.enter_cookie_combo.removeItem(0)
for i in range(len(names)):
self.enter_cookie_combo.addItem(names[i])
def set_containers(self):
self.tasks_container = dict()
self.profiles_container = {'No accounts': {}}
self.proxies_container = {'Local': {}}
self.skip_container = {'No Skip': {}}
self.cookie_container = {'No Cookie': {}}
self.settings_container = dict()
self.active_tasks = list()
self.save_settings()
# FIXME: добавить загрузку данных из реестра
def show_settings_tab(self):
self.save_indicator.hide()
self.tabs_widget.setCurrentIndex(3)
def show_proxy_tab(self):
self.create_proxy_indicator.hide()
self.tabs_widget.setCurrentIndex(4)
def show_profiles_tab(self):
self.create_profile_indicator.hide()
self.tabs_widget.setCurrentIndex(2)
if __name__ == "__main__":
app = QApplication(sys.argv)
w = MoveStartWindow() # !!!
w.show() # !!!
sys.exit(app.exec())

