【问题标题】:PyQt : Linking buttons to functions in my programPyQt:将按钮链接到我程序中的功能
【发布时间】:2017-07-04 01:34:03
【问题描述】:

假设我有这个用户界面,它有 2 个空文本点要填充和一个“运行”按钮。

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

我该怎么做?

【问题讨论】:

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


【解决方案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 中,我们可以将按钮的名称作为其参数(例如,在本例中为run)。现在是事件和信号的时候了。 要将PushButton连接到函数,我们写btn.clicked.connect(function_name)这里btn是我们的PushButton。注意这里的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 收集数据(QLineEdit 有一个text() 方法可以从QLineEdit 获取数据作为str)。所以我们的main 函数获取text_1text_2 的值并将它们相加(如果输入的值不能转换为整数,则会引发错误)并通过setText() 方法将该值设置为text_3

现在您必须将小部件打包到我们之前创建的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 窗口:

希望对您有所帮助。 如有问题,请发表评论。 编码愉快!

【讨论】:

  • 你能解释一下你在这里写了什么吗?我真的不擅长编码......我不知道你写了什么
  • 亲爱的@ItayKatsnelson 我已将我的代码编辑为一个很好解释的答案,如果有任何困难,请发表评论:)
  • 非常感谢它对我有很大帮助,但我刚刚意识到我在 PyQt4 上 .. 有什么不同还是我应该安装 PyQt5 并遵循你的代码?非常感谢!
  • PyQt5和PyQt4是有区别的,如果你是初学者你必须从PyQt5开始
  • @Tarpaeya 好的,我理解你写的代码我只是理解文本 3 的作用以及 main 中的第 3 行与文本 3 ......只是希望运行按钮运行我的主程序/文件和其他 2 篇文章要讨论……你怎么能用你在这里写的东西做到这一点?
猜你喜欢
  • 2017-07-07
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 2022-12-08
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多