Ломается текст и кнопки в PyQT5 на разных мониторах
Написал программу конвертации yml файлов в json. Всё было хорошо, пока я не запустил её на другом мониторе и тут поломался текст, что-то съелось и не видно часть текста и т.д. Пробовал создавать интерфейс на мониторе с коэффициентом приближения 100%, но не помогло.
На этой фотографии съелся текст сверху. Так же если перейти в раздел доп. информация, то и там текст зажевался куда-то.
Это фотография с ноутбука, тут ещё хуже ситуация.
А на ноутбуке, на котором я писал эту программу - всё работает отлично. Я прочитал, что долнжы помочь лаяуты, я пытался добавить автоматическое масштабирование, но у меня ничего не получилось, ПРОШУ помощи!
main.py
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QColor, QIcon
from PyQt5.uic import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys
import os
from ruamel.yaml import YAML
from ruamel.yaml.constructor import SafeConstructor
import json
#TODO: Доделать проверку ошибок на отсутствие файла И вывод о том, что файл успешно сохранён
from py_windows.main import Ui_MainWindow
from py_windows.informations import Ui_MainWindow2
class Main_Screen(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(Main_Screen, self).__init__(parent)
self.setupUi(self)
class Informations_Screen(QtWidgets.QMainWindow, Ui_MainWindow2):
def __init__(self, parent=None):
super(Informations_Screen, self).__init__(parent)
self.setupUi(self)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.fname = ""
self.centralWidget = QWidget()
self.setCentralWidget(self.centralWidget)
#Начало класса Main_Screen
self.main_screen = Main_Screen()
self.main_screen.pushButton_2.clicked.connect(self.add_file)
self.main_screen.pushButton.clicked.connect(self.save_file)
self.main_screen.pushButton_3.clicked.connect(self.gotoInformationScreen)
#Конец класса Main_Screen
#Начало класса Informations_Screen
self.informations_screen = Informations_Screen()
self.informations_screen.pushButton_3.clicked.connect(self.gotomain)
#Конец класса Informations_Screen
self.stack = QStackedWidget() # QStackedWidget видно сразу несколько виджетов
self.stack.addWidget(self.main_screen) # 0 self.stack.setCurrentIndex(0)
self.stack.addWidget(self.informations_screen) # 1 self.stack.setCurrentIndex(0)
self.stack.setCurrentIndex(0)
self.nameProgramm(self.stack.currentIndex())
self.gotomain()
hbox = QHBoxLayout(self.centralWidget)
hbox.setContentsMargins(0, 0, 0, 0) #вроде можно без этого ????????????????????????????????????
hbox.addWidget(self.stack)
def nameProgramm(self, w=0):
self.setWindowTitle('Конвертер YML to JSON')
self.setWindowIcon(QIcon('images/gnivc2.png'))
def gotomain(self):
self.stack.setCurrentIndex(0)
self.nameProgramm(self.stack.currentIndex())
self.adjustSize()
#self.setFixedSize(421, 516)
def gotoInformationScreen(self):
self.stack.setCurrentIndex(1)
self.nameProgramm(self.stack.currentIndex())
self.adjustSize()
#self.setFixedSize(421, 516)
def add_file(self):
self.fname, _ = QFileDialog.getOpenFileName(self,"Open file", ".", "YAML Files (*.yml)")
if self.fname:
base_name = os.path.basename(self.fname) #Только для верхнего поля
self.main_screen.lineEdit.setText(base_name)
def save_file(self):
if self.fname:
SplitFileByDuplicates(self.fname)
self.main_screen.lineEdit.setText("Конвертация завершена!")
self.main_screen.lineEdit.setStyleSheet("background-color: rgb(66, 71, 90);"
"color: green;"
"font-weight: bold;"
"border-radius: 15px; /* Задайте радиус, чтобы сделать края овальными */\n"
"padding: 2px;")
QTimer.singleShot(3000, self.clear_message)
else:
self.main_screen.lineEdit.setText("Ошибка конвертации!")
self.main_screen.lineEdit.setStyleSheet("background-color: rgb(66, 71, 90);"
"color: red;"
"font-weight: bold;"
"border-radius: 15px; /* Задайте радиус, чтобы сделать края овальными */\n"
"padding: 2px;")
QTimer.singleShot(3000, self.clear_message)
info = QMessageBox(self)
info.setIcon(QMessageBox.Warning) # Устанавливаем тип иконки внутри окна
info.setWindowTitle("Не выбран файл")
info.setText("Пожалуйста выберите файл для конвертации!")
info.setStandardButtons(QMessageBox.Ok)
# Устанавливаем внешнюю иконку для окна
info.setWindowIcon(QIcon('images/gnivc.png'))
# Устанавливаем стиль для изменения фона
info.setStyleSheet("""
QMessageBox {
background-color: rgb(17, 18, 21);
}
QMessageBox QLabel {
color: rgb(255, 255, 255); /* Цвет текста */
}
QPushButton {
color: white;
background-color: rgb(151, 102, 255);
}
""")
info.exec_()
def clear_message(self):
self.main_screen.lineEdit.setText("")
self.main_screen.lineEdit.setStyleSheet("background-color: rgb(66, 71, 90);\n"
"color: rgb(162, 162, 162);\n"
"border-radius: 15px; /* Задайте радиус, чтобы сделать края овальными */\n"
"padding: 2px;")
def SplitFileByDuplicates(file_name):
def construct_yaml_map(self, node):
data = []
yield data
for key_node, value_node in node.value:
key = self.construct_object(key_node, deep=True)
val = self.construct_object(value_node, deep=True)
data.append((key, val))
with open(file_name, "r") as f:
SafeConstructor.add_constructor(u'tag:yaml.org,2002:map', construct_yaml_map)
yaml = YAML(typ='safe')
data = yaml.load(f.read())
print(data)
servers = data[0][1]
def create_partition(server_list):
documents_folder = os.path.join(os.path.expanduser("~"), "Documents")
json_file_name = os.path.join(documents_folder, os.path.splitext(os.path.basename(file_name))[0] + ".json")
with open(json_file_name, "w") as f:
json.dump(server_list, f, indent=4)
server_list = []
for server in servers:
server_name = server[0]
server_data = server[1]
server_entry = {
"hostname": server_name,
"data": {k: v for k, v in server_data}
}
server_list.append(server_entry)
if server_list:
create_partition(server_list)
def application():
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
application()
main_screen.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'main.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(421, 516)
MainWindow.setMinimumSize(QtCore.QSize(421, 516))
MainWindow.setMaximumSize(QtCore.QSize(421, 516))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.widget = QtWidgets.QWidget(self.centralwidget)
self.widget.setGeometry(QtCore.QRect(0, 0, 421, 516))
self.widget.setStyleSheet("#widget{background-color: rgb(17, 18, 21);}")
self.widget.setObjectName("widget")
self.widget_2 = QtWidgets.QWidget(self.widget)
self.widget_2.setGeometry(QtCore.QRect(0, 30, 421, 80))
self.widget_2.setStyleSheet("#widget_2{background-color: rgb(23, 25, 33);}\n"
"\n"
"\n"
"\n"
"")
self.widget_2.setObjectName("widget_2")
self.line_2 = QtWidgets.QFrame(self.widget_2)
self.line_2.setGeometry(QtCore.QRect(0, 0, 421, 3))
self.line_2.setStyleSheet("/*background-color: rgb(0, 139, 247);*/\n"
"background-color: rgb(151, 102, 255);")
self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_2.setObjectName("line_2")
self.lineEdit = QtWidgets.QLineEdit(self.widget_2)
self.lineEdit.setGeometry(QtCore.QRect(74, 26, 271, 31))
self.lineEdit.setStyleSheet("background-color: rgb(66, 71, 90);\n"
"color: rgb(162, 162, 162);\n"
"border-radius: 15px; /* Задайте радиус, чтобы сделать края овальными */\n"
"padding: 2px;")
self.lineEdit.setCursorPosition(0)
self.lineEdit.setAlignment(QtCore.Qt.AlignCenter)
self.lineEdit.setObjectName("lineEdit")
self.widget_3 = QtWidgets.QWidget(self.widget_2)
self.widget_3.setGeometry(QtCore.QRect(13, 8, 61, 61))
self.widget_3.setStyleSheet("background-image: url(:/file/images/yml3.png);")
self.widget_3.setObjectName("widget_3")
self.widget_4 = QtWidgets.QWidget(self.widget_2)
self.widget_4.setGeometry(QtCore.QRect(346, 7, 61, 61))
self.widget_4.setStyleSheet("background-image: url(:/file/images/json3.png);")
self.widget_4.setObjectName("widget_4")
self.line = QtWidgets.QFrame(self.widget)
self.line.setGeometry(QtCore.QRect(0, 110, 421, 3))
self.line.setStyleSheet("/*background-color: rgb(0, 139, 247);*/\n"
"background-color: rgb(151, 102, 255);")
self.line.setFrameShape(QtWidgets.QFrame.HLine)
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line.setObjectName("line")
self.label = QtWidgets.QLabel(self.widget)
self.label.setGeometry(QtCore.QRect(125, 6, 171, 19))
self.label.setMinimumSize(QtCore.QSize(131, 19))
self.label.setMaximumSize(QtCore.QSize(99999, 99999))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.label.setFont(font)
self.label.setStyleSheet("color: rgb(151, 102, 255);")
self.label.setObjectName("label")
self.pushButton = QtWidgets.QPushButton(self.widget)
self.pushButton.setGeometry(QtCore.QRect(105, 190, 211, 31))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.pushButton.setFont(font)
self.pushButton.setStyleSheet("#pushButton {\n"
"background-color: rgb(151, 102, 255);\n"
"/*background-color: rgb(0, 139, 247);*/\n"
" color: rgb(255, 255, 255);\n"
"border-radius: 15px; /* Задайте радиус, чтобы сделать края овальными */\n"
"padding: 2px;}\n"
"\n"
"\n"
"#pushButton:hover{\n"
"background-color: rgb(164, 205, 217);\n"
"}")
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.widget)
self.pushButton_2.setGeometry(QtCore.QRect(105, 140, 211, 31))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.pushButton_2.setFont(font)
self.pushButton_2.setStyleSheet("#pushButton_2 {\n"
" background-color: rgb(151, 102, 255);\n"
"/*background-color: rgb(0, 139, 247);*/\n"
" color: rgb(255, 255, 255);\n"
"border-radius: 15px; /* Задайте радиус, чтобы сделать края овальными */\n"
"padding: 2px;}\n"
"\n"
"\n"
"#pushButton_2:hover{\n"
"background-color: rgb(164, 205, 217);\n"
"}")
self.pushButton_2.setObjectName("pushButton_2")
self.widget_5 = QtWidgets.QWidget(self.widget)
self.widget_5.setGeometry(QtCore.QRect(110, 247, 200, 200))
self.widget_5.setStyleSheet("background-image: url(:/file/images/gnvclogo.png);")
self.widget_5.setObjectName("widget_5")
self.pushButton_3 = QtWidgets.QPushButton(self.widget)
self.pushButton_3.setGeometry(QtCore.QRect(75, 470, 271, 31))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.pushButton_3.setFont(font)
self.pushButton_3.setStyleSheet("#pushButton_3 {\n"
"background-color: rgb(151, 102, 255);\n"
"/*background-color: rgb(0, 139, 247);*/\n"
" color: rgb(255, 255, 255);\n"
"border-radius: 15px; /* Задайте радиус, чтобы сделать края овальными */\n"
"padding: 2px;}\n"
"\n"
"\n"
"#pushButton_3:hover{\n"
"background-color: rgb(164, 205, 217);\n"
"}")
self.pushButton_3.setObjectName("pushButton_3")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.lineEdit.setPlaceholderText(_translate("MainWindow", "Название файла.yml"))
self.label.setText(_translate("MainWindow", "Конвертация YML в JSON"))
self.pushButton.setText(_translate("MainWindow", "Конвертировать"))
self.pushButton_2.setText(_translate("MainWindow", "Выбрать файл"))
self.pushButton_3.setText(_translate("MainWindow", "Дополнительная информация"))
import qrc_files.file
informations_screen.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'informations.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow2(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(421, 516)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.widget = QtWidgets.QWidget(self.centralwidget)
self.widget.setGeometry(QtCore.QRect(0, 0, 421, 516))
self.widget.setStyleSheet("#widget{background-color: rgb(17, 18, 21);}")
self.widget.setObjectName("widget")
self.widget_2 = QtWidgets.QWidget(self.widget)
self.widget_2.setGeometry(QtCore.QRect(0, 170, 421, 80))
self.widget_2.setStyleSheet("#widget_2{background-color: rgb(23, 25, 33);}\n"
"\n"
"\n"
"\n"
"")
self.widget_2.setObjectName("widget_2")
self.line_2 = QtWidgets.QFrame(self.widget_2)
self.line_2.setGeometry(QtCore.QRect(0, 0, 421, 3))
self.line_2.setStyleSheet("/*background-color: rgb(0, 139, 247);*/\n"
"background-color: rgb(151, 102, 255);")
self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_2.setObjectName("line_2")
self.label = QtWidgets.QLabel(self.widget_2)
self.label.setGeometry(QtCore.QRect(70, 10, 286, 19))
self.label.setStyleSheet("color: rgb(255, 255, 255);")
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.widget_2)
self.label_2.setGeometry(QtCore.QRect(113, 34, 195, 20))
self.label_2.setStyleSheet("color: rgb(255, 255, 255);")
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(self.widget_2)
self.label_3.setGeometry(QtCore.QRect(125, 60, 171, 20))
self.label_3.setStyleSheet("color: rgb(151, 102, 255);")
self.label_3.setObjectName("label_3")
self.line = QtWidgets.QFrame(self.widget)
self.line.setGeometry(QtCore.QRect(0, 250, 421, 3))
self.line.setStyleSheet("/*background-color: rgb(0, 139, 247);*/\n"
"background-color: rgb(151, 102, 255);")
self.line.setFrameShape(QtWidgets.QFrame.HLine)
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line.setObjectName("line")
self.pushButton_3 = QtWidgets.QPushButton(self.widget)
self.pushButton_3.setGeometry(QtCore.QRect(75, 470, 271, 31))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.pushButton_3.setFont(font)
self.pushButton_3.setStyleSheet("#pushButton_3 {\n"
"background-color: rgb(151, 102, 255);\n"
"/*background-color: rgb(0, 139, 247);*/\n"
" color: rgb(255, 255, 255);\n"
"border-radius: 15px; /* Задайте радиус, чтобы сделать края овальными */\n"
"padding: 2px;}\n"
"\n"
"\n"
"#pushButton_3:hover{\n"
"background-color: rgb(164, 205, 217);\n"
"}")
self.pushButton_3.setObjectName("pushButton_3")
self.widget_5 = QtWidgets.QWidget(self.widget)
self.widget_5.setGeometry(QtCore.QRect(110, 50, 200, 120))
self.widget_5.setStyleSheet("background-image: url(:/file/images/gnvclogo.png);")
self.widget_5.setObjectName("widget_5")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "Программа сохраняет Json файл в \"Документы\""))
self.label_2.setText(_translate("MainWindow", "Создано для сотрудников ГНИВЦ"))
self.label_3.setText(_translate("MainWindow", "Created by: Никита Пфейфер"))
self.pushButton_3.setText(_translate("MainWindow", "Назад"))
import qrc_files.file