PyQt:将按钮链接到程序中的函数

时间:2017-02-15 11:48:33

标签: python python-3.x user-interface pyqt pyqt5

所以,让我说我有这个ui有2个空文本点填充和一个'运行'按钮。

我想让程序中的两个空文本点转到某些值,运行按钮基本上会运行python' Main'节目......

我该怎么做?

1 个答案:

答案 0 :(得分:1)

在PyQt5中,QWidgets模块提供了一组UI元素来创建经典的桌面式用户界面。窗口小部件可以显示数据和状态信息,接收用户输入,并为应该组合在一起的其他窗口小部件提供容器。未嵌入父窗口小部件的窗口小部件称为窗口。包含各种子窗口小部件的父窗口小部件。首先,您开始为窗口编写代码

window=QtWidgets.QWidget()

(QWidget类是所有用户界面对象的基类)。一旦创建了窗口,就需要为UI窗口设置布局。 Qt中有许多布局类,但最常见的是QVBoxLayout(垂直排列小部件)和QHBoxLayout(水平排列小部件)。很多时候它们都用来制作一个自定义布局。现在创建QVBoxLayout

vbox=QWidgets.QVBoxLayout()

(请注意,vbox只是一个变量名)。接下来是将窗口小部件放在窗口内,可以将其作为

text_1=QtWidgets.QLineEdit()
text_2=QtWidgets.QLineEdit()
run_btn=QtWidgets.QPushButton("run")
text_3=QtWidgets.QLineEdit()

请注意,在QPushButton中,我们可以将按钮的名称作为其参数(在本例中为ex - run)。现在是事件和信号的时间。 要将PushButton连接到一个函数,我们写btn.clicked.connect(function_name)这里btn是我们的PushButton.Note,这里的function_name没有括号,这意味着我们没有调用函数,只是将按钮连接到函数(当用户单击该按钮时,该函数将被执行).Foramlly可以写为

run_btn=QtWidgets.QPushButton("run")
def main():
    data_1=text_1.text()
    data_2=text_2.text()
    text_3.setText(str(int(data_1)+int(data_2)))

现在,在我们的main函数中,我们首先从text_1text_2收集了数据(text()QLineEdit方法从中获取数据QLineEdit为str。所以我们的main函数会获取text_1text_2的值并添加它们(如果输入的值无法转换,则会引发错误整数)并通过text_3方法将该值设置为setText()

现在你必须将我们之前创建的vbox中的小部件打包为

vbox.addWidget(text_1)
vbox.addWidget(text_2)
vbox.addWidget(run_btn)
vbox.addWidget(text_3)

现在将窗口的布局设置为

window.setLayout(vbox)

并将窗口显示为

window.show()

到目前为止,有一件事情遗失了,那就是

app=QtWidgets.QApplication(sys.argv)

这一行是必要的,因为每个PyQt5应用程序都必须创建一个应用程序对象。 sys.argv参数是命令行中的参数列表。 现在我们必须创建应用程序的主循环。事件处理从这一点开始。 app.exec_()方法运行我们的应用程序,然后提供一个干净的退出。

现在把所有人放在一起:

import sys
from PyQt5 import QtWidgets

app=QtWidgets.QApplication(sys.argv)
window=QtWidgets.QWidget()
vbox=QtWidgets.QVBoxLayout()
text_1=QtWidgets.QLineEdit()
text_2=QtWidgets.QLineEdit()
run_btn=QtWidgets.QPushButton("run")
text_3=QtWidgets.QLineEdit()
def main():
    data_1=text_1.text()
    data_2=text_2.text()
    text_3.setText(str(int(data_1)+int(data_2)))
run_btn.clicked.connect(main)
vbox.addWidget(text_1)
vbox.addWidget(text_2)
vbox.addWidget(run_btn)
vbox.addWidget(text_3)
window.setLayout(vbox)
window.show()
sys.exit(app.exec_())

这将创建一个这样的UI窗口:

enter image description here

希望它有所帮助。 如有问题请发表评论。 快乐的编码!