简单的按钮点击连接到Python函数

2023-12-05

我有一个非常简单的 Qml/Python 应用程序,其中有 StackView() 中的一些内容,第一页包含一个简单的按钮。我的问题是,Qml 和 Python 之间的所有内容都仅通过信号工作吗?或者按钮可以直接从 python 脚本单击触发/调用函数吗?

没有尝试太多,因为我不知道如何从这里继续

main.qml

import QtQuick 2.12
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.5
import "custom/components"


ApplicationWindow {
    visible: true
    width: 800
    height: 600
    minimumWidth: 800
    minimumHeight: 600

    title: qsTr('Primer')

    property bool authorized: false

    signal change_page(bool change)


    // Main Container - View
    StackView {
        id: view
        anchors.fill: parent
        initialItem: home
    }


    // Page Content
    Component {
        id: home
        Page {
            title: qsTr('Home')

            GenButton {
                text: "To Orders"
                bg_color: "white"
                txt_color: "grey"

                onClicked: homeFunc.changePage()
            }
        }
    }

    Component {
        id: orders
        Page {
            title: qsTr('Orders')
        }
    }

    Component {
        id: quotes
        Page {
            title: qsTr('Quotes')
        }
    }

}

GenButton.qml

import QtQuick 2.12
import QtQuick.Controls 2.5


Button {
    id: ctrl

    property color bg_color: "white"
    property color txt_color: "black"

    background: Rectangle {
        color: ctrl.pressed ? Qt.darker(bg_color, 1.25) : bg_color
    }

    contentItem: Text {
        text: ctrl.text
        padding: ctrl.padding
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
        font.family: "Segoe UI"
        font.pixelSize: 14
        color: txt_color
    }
}

main.py

import sys
from PyQt5.QtGui import QGuiApplication, QIcon
from PyQt5.QtQml import QQmlApplicationEngine
from resources.functions.homeFunctions import HomeFunctions


APP = QGuiApplication(sys.argv)
APP.setWindowIcon(QIcon('resources/img/primerLogo.png'))

home_func = HomeFunctions()

ENGINE = QQmlApplicationEngine()
ENGINE.rootContext().setContextProperty('homeFunc', home_func)
ENGINE.load('resources/qml/main.qml')
ENGINE.quit.connect(APP.quit)

sys.exit(APP.exec_())

homeFunctions.py

from PyQt5.QtCore import QObject


class HomeFunctions(QObject):
    def __init__(self):
        QObject.__init__(self)


    def changePage(self):
        print("Button was pressed")

预期的结果是终端打印消息“按钮被按下”,这是一个非常简单的例子,可能有 1000 种不同的其他方式来实现,但这只是一个测试

收到的错误如下:

file:///D:/Personal Backups/CodingProjects/PycharmProjects/calico/resources/qml/main.qml:40: TypeError: Property 'changePage' of object HomeFunctions(0xc3f5c8) is not a function

解释:

QML 使用 QObject 的 MetaObject (MOC) 来访问属性、信号和槽,在您的情况下,changePage 不是槽,而是无法从 QML 访问的函数。

解决方案:

解决方案是使用 @pyqtSlot 装饰器在 QML 中访问 ChangePage 函数:

homeFunctions.py

from PyQt5.QtCore import pyqtSlot, QObject


class HomeFunctions(QObject):
    @pyqtSlot()
    def changePage(self):
        print("Button was pressed")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单的按钮点击连接到Python函数 的相关文章

  • 元组有什么用?

    我现在正在学习 Python 课程 我们刚刚介绍了元组作为数据类型之一 我阅读了它的维基百科页面 但是 我无法弄清楚这种数据类型在实践中会有什么用处 我可以提供一些需要一组不可变数字的示例吗 也许是在 Python 中 这与列表有何不同 每
  • 如何在 QtQuick 2 中对 QML TableView 进行排序?

    我想使用 Qt 5 1 实现具有自定义角色的可排序 TableView 但我不知道当用户单击标题时该怎么做才能对其进行排序 在我的 Qt pro 文件中 我添加了 android ios blackberry qtHaveModule wi
  • 当变量取特定值时如何使 PyCharm 中断?

    我有一本大字典 其中一些元素偶尔会出现非法值 我想弄清楚非法值从何而来 PyCharm 应该不断监视我的字典的值 一旦它们中的任何一个取了非法值 它就应该中断并让我检查程序的状态 我知道我可以通过为我的字典创建一个 getter sette
  • 使用 kivy textinput 的 'input_type' 属性的问题

    您好 我在使用 kivy 的文本输入小部件的 input type 属性时遇到问题 问题是我制作了两个自定义文本输入 其中一个称为 StrText 其中设置了 input type text 然后是第二个文本输入 名为 NumText 其
  • 您可以格式化 pandas 整数以进行显示,例如浮点数的“pd.options.display.float_format”?

    我见过this https stackoverflow com questions 18404946 py pandas formatdataframe and this https stackoverflow com questions
  • 立体太阳图 matplotlib 极坐标图 python

    我正在尝试创建一个与以下类似的简单的立体太阳路径图 http wiki naturalfrequent com wiki Sun Path Diagram http wiki naturalfrequency com wiki Sun Pa
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • 在Python中连接反斜杠

    我是 python 新手 所以如果这听起来很简单 请原谅我 我想加入一些变量来生成一条路径 像这样 AAAABBBBCCCC 2 2014 04 2014 04 01 csv Id TypeOfMachine year month year
  • 使用 xlrd 打开 BytesIO (xlsx)

    我正在使用 Django 需要读取上传的 xlsx 文件的工作表和单元格 使用 xlrd 应该可以 但因为文件必须保留在内存中并且可能不会保存到我不知道如何继续的位置 本例中的起点是一个带有上传输入和提交按钮的网页 提交后 文件被捕获req
  • “隐藏”内置类对象、函数、代码等的名称和性质[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我很好奇模块中存在的类builtins无法直接访问的 例如 type lambda 0 name function of module
  • 如何使用 Mysql Python 连接器检索二进制数据?

    如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • 从 NumPy ndarray 中选择行

    我只想从 a 中选择某些行NumPy http en wikipedia org wiki NumPy基于第二列中的值的数组 例如 此测试数组的第二列包含从 1 到 10 的整数 gt gt gt test numpy array nump
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 如何断言 Unittest 上的可迭代对象不为空?

    向服务提交查询后 我会收到一本字典或一个列表 我想确保它不为空 我使用Python 2 7 我很惊讶没有任何assertEmpty方法为unittest TestCase类实例 现有的替代方案看起来并不正确 self assertTrue
  • 如何在 Windows 命令行中使用参数运行 Python 脚本

    这是我的蟒蛇hello py script def hello a b print hello and that s your sum sum a b print sum import sys if name main hello sys
  • 如何在 pygtk 中创建新信号

    我创建了一个 python 对象 但我想在它上面发送信号 我让它继承自 gobject GObject 但似乎没有任何方法可以在我的对象上创建新信号 您还可以在类定义中定义信号 class MyGObjectClass gobject GO
  • Python ImportError:无法导入名称 __init__.py

    我收到此错误 ImportError cannot import name life table from cdc life tables C Users tony OneDrive Documents Retirement retirem
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我
  • 将 Python 中的日期与日期时间进行比较

    所以我有一个日期列表 datetime date 2013 7 9 datetime date 2013 7 12 datetime date 2013 7 15 datetime date 2013 7 18 datetime date

随机推荐

  • 通过 api/cli 启用和禁用 S3 复制规则

    我已在 S3 存储桶上设置了复制规则 以填充 preprod 存储桶以进行测试 这意味着我希望能够轻松地打开和关闭复制 并可能根据需要转储和刷新复制存储桶 我正在为此创建一个脚本 但很难找到一种在使用 AWS 控制台之外轻松打开和关闭复制规
  • TripleDES 加密和解密给出奇怪的结果

    我有一个有效的实施TripleDESCng 针对一些测试向量进行测试 但会发生以下情况 当我加密纯文本时This is a sample message 24 字节 因此这将是 3 个块 十六进制为546869732069732061207
  • DynamicJasper - 如何添加子报表作为列?

    Overview 我有一个 Java 类 其中有一个ArrayList必须打印到 jasperReport 作为子报表 我正在使用 DynamicJasper 库 关于这个问题的示例已被修改 因此可以复制 然而 实际情况的数据有所不同 Pr
  • 将单列分成 3 列,保留原始列 (R)

    我有一个独特的字符列 位于 DD HH MM 中 我试图将该列分成 3 个新的numeric列 我对单独函数的问题是它替换了原始列 并且我不知道如何传递多个条件SEP 请注意 并非每个观察结果都有 DD 我当前的代码如下所示 separat
  • IPC 性能:命名管道与套接字

    每个人似乎都说命名管道比套接字 IPC 更快 他们快了多少 我更喜欢使用套接字 因为它们可以进行双向通信并且非常灵活 但如果速度相当大 我会选择速度而不是灵活性 您将获得的最佳结果共享内存解决方案 命名管道仅比 16 好TCP 套接字 结果
  • C# 与 C++/CLI 中的 Unicode 字符串文字

    C char z u201D int i int z C CLI wchar t z u201D int i int z In C i正如我所期望的那样 变成了 8221 201D 另一方面 在 C CLI 中 它变成了 65428 FF9
  • Java 获取 MIB 中 OID 的名称/描述

    我正在编写一个网络管理系统 并且需要能够打印出从 SNMP 陷阱接收到的 OID 后面有意义的名称 由于该系统的性质 大小 对于正在使用的每台设备上的每个 MIB 手动将每个 OID 映射到有意义的名称并不是一个好主意 话虽如此 是否有一种
  • 更快的 iPhone PNG 动画

    目前 我的计时器上有一个 PNG 动画 每 0 01 秒触发一次 然而 性能并不是最佳的 而且动画速度明显很慢 我有超过 2000 张图片 有更好的方法来实现这一点吗 我在下面发布了与我的方法类似的内容 timer NSTimer sche
  • R 中向量的指数移动平均值

    我有一个简单的向量如下 x c 14 24 13 82 12 75 12 92 12 94 13 00 14 14 16 28 20 64 17 64 我正在尝试使用以下函数找到该向量的滚动 EMA library TTR y EMA x
  • matplotlib 错误 - 没有名为 tkinter 的模块 [重复]

    这个问题在这里已经有答案了 我尝试在 Windows 10 上通过 Pycharm IDE 使用 matplotlib 包 当我运行这段代码时 from matplotlib import pyplot 我收到以下错误 ImportErro
  • Java Swing、JComboBox 下拉列表在单击之前更改侦听器

    我有一个 JComboBox 其中包含 MIDI 文件列表 我想知道以下操作是否可行 当我单击 JComboBox 时 会打开一个下拉列表 当我将鼠标移到 midi 文件上时 它会播放 10 秒的示例声音 因此我知道该文件包含什么内容在我单
  • CakePHP 不使用我的模型

    我有这两个 CakePHP V 2 4 5 模型 class Owner extends AppModel public name Owner public hasMany array Car and class Car extends A
  • 使用python将csv转为json,json按行排列

    我想使用 Python 将 CSV 转换为一组 JSON 对象 并按行格式化 我尝试了下面的脚本 将几个 SO 答案放在一起 但格式如下 key value key value etc 我想将其格式化为 key value key valu
  • 更改 Microsoft Azure Blob - PHP 的默认服务版本

    this gt blobClient ServicesBuilder getInstance gt createBlobService azureString properties this gt blobClient gt getServ
  • Web Speech API Grammar 是否向开发人员公开?

    我目前正在对 Webkit 语音识别进行一些研究 我想创建一个特定于应用程序的语法文件 根据W3C的定义我写了下面的代码 但它似乎并没有显示出对这些单词的识别效果有所改善 您能提供一些帮助吗 var 识别 new webkitSpeechR
  • 当数组中元素的长度大于 2 时,出现“太多值无法解压(预期为 2)”

    也许问这个问题会很奇怪 因为我当然不明白 例如 如果我们有a 1 2 3 4 操作有效 for x y in a print x y 但是一旦我们向这些元组添加任何其他元素 a 1 2 3 4 5 6 for x y in a print
  • 循环和内置函数之间的数值不一致

    我正在尝试计算随机数数组的总和 但是 当我一次执行一个元素与使用内置函数时 结果之间似乎不一致 此外 当我降低数据精度时 误差似乎会增加 import torch columns 43 22 rows 44 torch manual see
  • C 中的通用数组元素交换

    我现在意识到 在我的许多代码中 我将有 2 或 3 个这样的函数 void swap int a int b int t a a b b t 每个都有自己的指针类型 我想知道的是 是否有一种方法可以交换数组的两个元素 例如 无论数组类型如何
  • 从 dask 中具有多个值的列创建虚拟对象

    我的问题与此主题类似从 pandas 中具有多个值的列创建虚拟对象 目标 我想在下面产生类似的结果 但使用 dask 在熊猫中 import pandas as pd df pd DataFrame fruit Banana Apple D
  • 简单的按钮点击连接到Python函数

    我有一个非常简单的 Qml Python 应用程序 其中有 StackView 中的一些内容 第一页包含一个简单的按钮 我的问题是 Qml 和 Python 之间的所有内容都仅通过信号工作吗 或者按钮可以直接从 python 脚本单击触发