【问题标题】:Blank PyQt5 Program空白 PyQt5 程序
【发布时间】:2017-05-10 02:53:02
【问题描述】:

我正在尝试使用 PyQt5 创建一个简单的 GUI,但是每当我运行程序时。它显示的只是一个空白窗口。如何让按钮或 QLineEdit 等元素实际出现在窗口中?

任何指针都将不胜感激,因为我正在尝试创建一个可以接受用户输入(在本例中为徽章和票号)然后在将信息显示为输出之前查询数据库以获取管属性和数量的应用程序。

from PyQt5 import QtCore, QtWidgets

class Ui_MainWindow(object):

    def __init__(self):
        self.title = 'Tube Bender UI'
        self.description = QtWidgets.QLabel('New Order Available')
        self.badge = QtWidgets.QLineEdit()
        self.ticket = QtWidgets.QLineEdit()
        self.tubes = 0

    def setupUi(self, MainWindow):

        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 641)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
        MainWindow.setSizePolicy(sizePolicy)
        MainWindow.setMaximumSize(QtCore.QSize(800, 641))

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setMinimumSize(QtCore.QSize(800, 641))
        self.centralwidget.setMaximumSize(QtCore.QSize(800, 641))
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(0, 320, 801, 641))

        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.horizontalLayoutWidget.sizePolicy().hasHeightForWidth())

    #tubes = 0

    def coil_id(self):
        QtWidgets.QLineEdit(self)
        return self.ticket

    def page_description(self):
        QtWidgets.QLineEdit(self)
        return self.description

    def page_title(self):
        QtWidgets.QLineEdit(self)
        return self.title

    def badge_id(self):
        QtWidgets.QLineEdit(self)
        return self.badge

    def tube_count(self):
        QtWidgets.QLineEdit(self)
        print(self.tubes)


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    MainPage = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show())
    sys.exit(app.exec_()

【问题讨论】:

  • 绝对不用提你的菜鸟。我们要么从您的问题/代码中快速找出答案,要么我们不会,因为您比您想象的要好。作为一个菜鸟不应该阻止你提出好的问题,所以这真的没关系。
  • MainPage = QtWidgets.QMainWindow()的目的是什么?
  • 我认为您没有将QLineEditQPushButton 添加到窗口中
  • 您永远不会将您创建的元素添加到主窗口。
  • 另外,拥有执行QtWidgets.QLineEdit(self) 的方法的目的是什么?这只是每次都创建一个新对象,甚至不会销毁它,因为您已为其分配了父对象,从而将所有权转移给了 Qt。

标签: python user-interface pyqt pyqt5


【解决方案1】:

看看这个小例子,尽量做到最简单。还有更多要学习的东西和更多好的实践,不仅仅是通过这样的一切,但无论如何,这里是:

import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QHBoxLayout
from PyQt5.QtWidgets import QLabel
from PyQt5.QtWidgets import QLineEdit
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QVBoxLayout
from PyQt5.QtWidgets import QWidget


class MainWindow(QMainWindow):

    layout_main = None
    central_widget = None
    lbl_name = None
    lbl_value = None
    input_name = None
    input_value = None

    def __init__(self):
        super(MainWindow, self).__init__()
        self.init_ui()

    def init_ui(self):
        #variables
        self.layout_main = QVBoxLayout()
        self.layout_labels = QHBoxLayout()
        self.layout_inputs = QHBoxLayout()
        self.central_widget = QWidget()
        self.lbl_name = QLabel("name")
        self.lbl_name.setFixedSize(100,50)
        self.lbl_value = QLabel("Value")
        self.lbl_value.setFixedSize(100, 50)
        self.input_name = QLineEdit()
        self.input_name.setFixedSize(100, 50)
        self.input_value = QLineEdit()
        self.input_value.setFixedSize(100, 50)
        #style
        self.layout_main.setContentsMargins(10, 10, 10, 10)
        self.setMinimumSize(250,100)
        #adding objects
        self.layout_labels.addWidget(self.lbl_name)
        self.layout_labels.addWidget(self.lbl_value)
        self.layout_main.addLayout(self.layout_labels)
        self.layout_inputs.addWidget(self.input_name)
        self.layout_inputs.addWidget(self.input_value)
        self.layout_main.addLayout(self.layout_inputs)

        self.central_widget.setLayout(self.layout_main)
        self.setCentralWidget(self.central_widget)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())

你会看到,稍后你将不得不重写许多继承自 qt 类的类,并根据你的需要一一进行个性化。只是一个提示“)

【讨论】:

  • 我非常感谢 Y. Melo 的例子。它帮助我理解了一些一般原则,我会一直努力直到它沉入其中。看起来最好放弃我的原始代码,你的示例确实帮助我简化了一些事情。
  • 是的,当然@Sora 我知道我们刚开始使用 qt 时的情况,我在 8 个月前从头开始并且学到了很多东西,我会告诉你要尝试永远尽可能阅读 API,我从那里学到了很多,当然也从这里“)。任何事情都可以联系我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-08
  • 1970-01-01
  • 2013-07-20
  • 2014-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多