如何使用 PyQt4 添加提交、输出和输入框?

How can I add a submit, output and input box using PyQt4?

我从未尝试过使用 Java 以外的语言创建 GUI(不久前有点把它放在一边) 并开始使用 Python。 制作了一个简单的程序,可以根据用户的意愿将 Pi 计算到某个数字。 现在,我用 PyQt4 创建了一个 window,制作了一个按钮,一切就绪。

我如何添加一个输入框,以便用户可以在其中输入数字,使按钮 "Enter" 成为信息,并在所有输出结束时将其输出到 window航站楼?

这就是我现在得到的:

import sys
from PyQt4 import QtGui 
from PyQt4 import QtCore
from decimal import *

class Window(QtGui.QMainWindow):

    def __init__(self):
        super(Window, self).__init__()
        self.setGeometry(50, 50, 800, 600)
        self.setWindowTitle("Pi's Nth Digit")
        self.setWindowIcon(QtGui.QIcon('icon.jpg'))
        self.buttons()

    def buttons(self):
        btn = QtGui.QPushButton("Quit",self)
        btn1 = QtGui.QPushButton("Get Pi",self)
        btn.clicked.connect(QtCore.QCoreApplication.instance().quit)
        btn1.clicked.connect(self.getpi())
        btn1.resize(btn1.sizeHint())
        btn.resize(btn.sizeHint())
        btn1.move(350,500)
        btn.move(450,500)
        self.show()

def start():
    app = QtGui.QApplication(sys.argv)
    GUI = Window()
    sys.exit(app.exec_())

start()

不介意 getpi 函数。 谢谢! :)

您几乎拥有所有内容,只需在显示结果的位置添加一个 QLineEdit to get the input and a QLabel(使用 QLabel.setText)。

您可能希望对数字使用 QLineEdit 或 QSpinBox。如果您想要在一个小部件中包含多个内容,您可以使用布局。 QMainWindow 通常有一个中央小部件以及工具栏和停靠小部件。

class Window(QtGui.QMainWindow):
    def __init__(self):
        super().__init__()

        self.container = QtGui.QWidget()
        self.setCentralWidget(self.container)
        self.container_lay = QtGui.QVBoxLayout()
        self.container.setLayout(self.container_lay) 

        # Input
        self.le = QtGui.QLineEdit()
        self.container_lay.addWidget(self.le)

        # enter button
        self.enter_btn = QtGui.QPushButton("Enter")
        self.container_lay.addWidget(self.enter_btn)
        self.enter_btn.clicked.connect(self.run) # No '()' on run you want to reference the method.

        # display
        self.container_lay.addWidget(QtGui.QLabel("Answer:"))
        self.ans = QtGui.QLabel()
        self.container_lay.addWidget(self.ans)

    def run(self):
        precision = self.le.text()
        pi = str(round(math.pi, precision)) # probably different formatting
        self.ans.setText(pi) 

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)

    window = Window()
    window.show()

    sys.exit(app.exec_())