RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1584754
Accepted
Никита Пфейфер
Никита Пфейфер
Asked:2024-06-21 21:57:11 +0000 UTC2024-06-21 21:57:11 +0000 UTC 2024-06-21 21:57:11 +0000 UTC

PyQT5 中的文本和按钮在不同显示器上中断

  • 772

我写了一个程序将 yml 文件转换为 json。一切都很好,直到我在另一台显示器上启动它,然后文本损坏了,有东西被吃掉,部分文本不可见,等等。我尝试在缩放系数为 100% 的显示器上创建界面,但没有帮助。

这张照片上面的文字已经被吃掉了。另外,如果您转到附加部分。信息,然后文本被卡在某处。

在此输入图像描述

这是笔记本电脑上的照片,这里的情况更糟。

在此输入图像描述

在我编写此程序的笔记本电脑上,一切正常。我读到布局应该有所帮助,我尝试添加自动缩放,但没有任何效果,我寻求帮助!

主要.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()

主屏幕.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
python
  • 1 1 个回答
  • 21 Views

1 个回答

  • Voted
  1. Best Answer
    Никита Пфейфер
    2024-06-27T18:09:26Z2024-06-27T18:09:26Z

    布局管理器解决了这个问题

    • 0

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5