我使用 PyQt5 创建了一个应用程序,它在 Windows 和 Linux 上都运行良好,但只针对一种形式。我试图弄清楚为什么表单在 Windows 上显示正确,但在 Linux 系统上显示不正确。
第一个表单是我使用 Designer 制作的简单登录表单。它具有垂直布局和字段的网格布局。在设计器中看起来像这样。
这在 Windows 中看起来不错:
但是在 Linux Mint 17.03 中,字段被压缩并且高度不正确:
它在 Unbutu 14.04 中类似:
我打开表单的代码类似于:
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:"))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句