gpt4 book ai didi

python - Windows 和 Linux 之间 QT 的形式差异

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:27 24 4
gpt4 key购买 nike

我使用 PyQt5 创建了一个应用程序,它在 Windows 和 Linux 上运行良好,但只适用于一种形式。我试图找出为什么该表单在 Windows 上正确显示但在 Linux 系统上不正确。

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

Qt Designer

这在 Windows 中看起来不错:

Windows

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

Linux Mint login screen

Unbutu 14.04 中类似:

Ubuntu login screen

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

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:"))

最佳答案

在 Qt Creator 中打开 UI 文件,右键单击对话框区域并选择布局,然后选择垂直布局水平布局 >。

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

enter image description here

关于python - Windows 和 Linux 之间 QT 的形式差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49431548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com