pythonkivy:在popup中绑定一个命令执行命令

2024-09-24 06:20:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我想有一个弹出窗口来确认用户真的想退出应用程序。现在,当我尝试将命令绑定到这两个按钮时,我只能直接在函数内部添加dissive,而不是通过回调函数。可能没问题。 但我只能通过回调调用关闭例程,而不是在函数内部。当我在这个函数中绑定quit_app()时,它在打开弹出窗口时直接执行。为什么?它应该绑定,而不是执行。在

(Old script deleted.)

我已经更新了我的脚本一点,包括一个最小的kv文件。它基本上可以工作(像以前一样),但看起来有点奇怪。在

用户界面-测试.py:

^{pr2}$

试验电压:

#:kivy 1.9

<Button>:
    font_size: 15

# Main Layout:
BoxLayout:
    orientation: 'vertical'

    Button:
        text: "Quit"
        id: "quit_button"
        size_hint: (0.1, None)
        size: (150, 50)
        on_release: app.Pop.up(self)

Tags: 函数用户命令脚本app应用程序sizescript
1条回答
网友
1楼 · 发布于 2024-09-24 06:20:32

问题

How would you call this popup from a kv file? When in my version (see updated script) Pop is not part of TestApp I can't access it from kv file

解决方案-使用kv文件

kv文件

  1. 添加import语句,#:import Factory kivy.factory.Factory
  2. 定义类规则,<Pop>:并添加小部件。在
  3. 使用Factory.Pop().open()注册、实例化并打开class Pop()

Factory object

The factory can be used to automatically register any class or module and instantiate classes from it anywhere in your project.

Python代码

  1. 使用App.get_running_app()获取class TestApp()的实例

示例-使用kv文件

在主.py在

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys

# Kivy imports:
import kivy
kivy.require('1.11.0')

from kivy.app import App
from kivy.uix.popup import Popup


VersionString = "DRAFT"
AppName = 'UI-Test'


def CloseProgram(Message, Level):
     print('Closing, level {} ({})'.format(Level, Message))
     sys.exit()


def OnClosing(self):
    print('Closing...')
    # ToDo: call popup


def init():
    print('Starting {} Version {}.'.format(AppName, VersionString))
    print('You are using Python version: {}'.format(sys.version))


class Pop(Popup):

    def callback(self, instance):
        App.get_running_app().quit_app(instance)


class TestApp(App):
    title = AppName + ' ' + VersionString

    def on_pause(self):
        return True

    def quit_app(self, btn):
        CloseProgram('Normal Closing', 'Debug')


if __name__ == '__main__':
    init()
    TestApp().run()

在试验电压在

^{pr2}$

输出-带kv文件

Img01 - with kv file - Popup.QuitButtonImg02 - with kv file - Popup.QuitButton

解决方案-无kv文件

  1. 在调用Popup.open()之前绑定所有按钮
  2. 使用App.get_running_应用程序()以获取类aempAPP的实例

代码段

    def callback(self, instance):
        print("\ncallback:")
        self.popup.dismiss()
        App.get_running_app().quit_app(1)

    def up(self):
        ...
        self.popup = Popup(title='Quit Program?', content=blayout, size_hint=(None, None), size=(400, 400))
        abutton.bind(on_release=self.popup.dismiss)
        qbutton.bind(on_release=self.callback)
        self.popup.open()

...
class aempApp(App):
    ...
    def quit_app(self, value):
        print(value)

示例-无kv文件

在主.py在

^{4}$

输出-无kv文件

Img01 - without kv fileImg02 - without kv file - Clicked Quit button

相关问题 更多 >