Windows 和 Linux 之间 QT 的形式差异

德凯利格

我使用 PyQt5 创建了一个应用程序,它在 Windows 和 Linux 上都运行良好,但只针对一种形式。我试图弄清楚为什么表单在 Windows 上显示正确,但在 Linux 系统上显示不正确。

第一个表单是我使用 Designer 制作的简单登录表单。它具有垂直布局和字段的网格布局。在设计器中看起来像这样。

Qt设计师

这在 Windows 中看起来不错:

视窗

但是在 Linux Mint 17.03 中,字段被压缩并且高度不正确:

Linux Mint 登录屏幕

它在 Unbutu 14.04 中类似:

Ubuntu登录界面

我打开表单的代码类似于:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from login import *
import csv


class Login(QDialog):
    """User login """
    def __init__(self):
        QDialog.__init__(self)
        self.ui = Ui_login_form()
        self.ui.setupUi(self)
        self.ui.buttonBox.accepted.connect(lambda: self.handle_login(servers=servers))
        servers = {}
        with open('servers.csv', newline='') as csvfile:
            server_reader = csv.reader(csvfile)
            for row in server_reader:
                self.ui.cbo_db_name.addItem(row[1])
                servers[row[1]] = (row[0],row[2],row[3])


    def handle_login(self, servers=''):
        the_key = self.ui.cbo_db_name.currentText()
        self.server = servers[the_key][0]


if __name__=="__main__":
    app=QApplication(sys.argv)
    access = Login()
    access.exec_()
    print(access.server)

    myapp = Test_form()
    myapp.show()
    sys.exit(app.exec_())

Qt 设计器的表单代码如下所示:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_login_form(object):
    def setupUi(self, login_form):
        login_form.setObjectName("login_form")
        login_form.resize(223, 129)
        self.layoutWidget = QtWidgets.QWidget(login_form)
        self.layoutWidget.setGeometry(QtCore.QRect(10, 10, 198, 105))
        self.layoutWidget.setObjectName("layoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget)
        self.verticalLayout.setObjectName("verticalLayout")
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setObjectName("gridLayout")
        self.label = QtWidgets.QLabel(self.layoutWidget)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 1, 0, 1, 1)
        self.password = QtWidgets.QLineEdit(self.layoutWidget)
        self.password.setEchoMode(QtWidgets.QLineEdit.Password)
        self.password.setObjectName("password")
        self.gridLayout.addWidget(self.password, 2, 1, 1, 1)
        self.username = QtWidgets.QLineEdit(self.layoutWidget)
        self.username.setObjectName("username")
        self.gridLayout.addWidget(self.username, 1, 1, 1, 1)
        self.label_2 = QtWidgets.QLabel(self.layoutWidget)
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1)
        self.cbo_db_name = QtWidgets.QComboBox(self.layoutWidget)
        self.cbo_db_name.setObjectName("cbo_db_name")
        self.gridLayout.addWidget(self.cbo_db_name, 0, 1, 1, 1)
        self.label_3 = QtWidgets.QLabel(self.layoutWidget)
        self.label_3.setObjectName("label_3")
        self.gridLayout.addWidget(self.label_3, 0, 0, 1, 1)
        self.verticalLayout.addLayout(self.gridLayout)
        self.buttonBox = QtWidgets.QDialogButtonBox(self.layoutWidget)
        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
        self.buttonBox.setObjectName("buttonBox")
        self.verticalLayout.addWidget(self.buttonBox)
        self.label.setBuddy(self.username)
        self.label_2.setBuddy(self.password)

        self.retranslateUi(login_form)
        self.buttonBox.accepted.connect(login_form.accept)
        self.buttonBox.rejected.connect(login_form.reject)
        QtCore.QMetaObject.connectSlotsByName(login_form)
        login_form.setTabOrder(self.username, self.password)
        login_form.setTabOrder(self.password, self.cbo_db_name)

    def retranslateUi(self, login_form):
        _translate = QtCore.QCoreApplication.translate
        login_form.setWindowTitle(_translate("login_form", "Please log in..."))
        self.label.setText(_translate("login_form", "User name:"))
        self.label_2.setText(_translate("login_form", "Password:"))
        self.label_3.setText(_translate("login_form", "Database:"))
开发人员 Paul

打开Qt Creator中的UI文件,用鼠标右键单击对话框区域,选择Lay out,然后选择Lay Out VerticallyLay Out Horizontally

这应该允许对话框的内容能够“拉伸”到登录对话框的完整大小。

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章