首页 > 编程问答 >在 Python 中将 Kivy 文件选择器添加到 PopUp

在 Python 中将 Kivy 文件选择器添加到 PopUp

时间:2024-07-26 15:56:53浏览次数:12  
标签:python kivy filechooser

我一直在尝试通过应用程序的按钮释放创建文件选择器弹出窗口。 我分别管理了 FileChooser 和 Popups,但无法将两者一起解决,这里有人可以帮助解决问题吗? 我正在尝试用 Python 而不是 Kivy.lang 来实现 PopUp,因为这是我在弹出窗口方面的经验。我也无法让 Kivy Doc 示例正常工作。 我目前拥有的代码如下。

import kivy
from kivy.uix.filechooser import FileChooserListView
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from kivy.uix.popup import Popup
import os

Builder.load_string(
"""
<MyWidget>:
    
    Button
        text: "open"
        on_release: root.load()
""")
    

class MyWidget(BoxLayout):
    def load(self):
        
        load_popup = Popup(
            title = "Select logo",
            size_hint = (None, None),
            size = (500, 500)
        )
         
        file_load= FileChooserListView(
            on_selection = self.selected(file_load.selection) #selection not in My
        )
        content = file_load
        load_popup.content = content
        load_popup.open()
        

    def open(self, path, filename):
        with open(os.path.join(path, filename[0])) as f:
            print(f)

    def selected(self, filename):
        print("selected: %s" % filename[0])


class MyApp(App):
    def build(self):
        return MyWidget()

if __name__ == '__main__':
    MyApp().run()

几乎成功了!问题在于如何将 on_selection 函数传递给 FileChooserListView 以及如何访问所选文件。

无需直接在构造函数中调用 self.selected ,而是在 on_selection 事件发生时将其绑定到调用。Kivy 将为处理这个问题。在 selected 方法内部,可以访问 FileChooserListView 实例的 selection 属性以获取所选文件。

以下是如何修改代码的方法:

import kivy
from kivy.uix.filechooser import FileChooserListView
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from kivy.uix.popup import Popup
import os

Builder.load_string(
"""
<MyWidget>:

    Button
        text: "open"
        on_release: root.load()
"""
)


class MyWidget(BoxLayout):
    def load(self):

        load_popup = Popup(
            title="Select logo",
            size_hint=(None, None),
            size=(500, 500)
        )

        file_load = FileChooserListView()
        # 将 selected 方法绑定到 on_selection 事件
        file_load.bind(on_selection=self.selected) 
        content = file_load
        load_popup.content = content
        load_popup.open()


    def open(self, path, filename):
        with open(os.path.join(path, filename[0])) as f:
            print(f)

    def selected(self, filechooser, filename):
        # 通过 filechooser.selection 访问所选文件
        print("selected: %s" % filename[0]) 

class MyApp(App):
    def build(self):
        return MyWidget()

if __name__ == '__main__':
    MyApp().run()

通过这些更改,的文件选择器弹出窗口现在应该可以按预期工作,并允许选择文件并在控制台中打印其路径。

标签:python,kivy,filechooser
From: 78796860

相关文章

  • Python基础知识点(1)基本语句
    基本语句1.if语句if表达式:语句块其中,表达式是一个返回True或False的表达式。如果表达式为True,则执行if下面的语句块;如果为False,则跳过语句块执行下面的语句。2.if…else语句if表达式:语句块1else:语句块2其中,表达式是一个返回True或False的表达式。如果......
  • 使用Python实现深度学习模型:语言翻译与多语种处理
    引言语言翻译和多语种处理是自然语言处理(NLP)中的重要任务,广泛应用于跨语言交流、国际化应用和多语言内容管理等领域。通过使用Python和深度学习技术,我们可以构建一个简单的语言翻译与多语种处理系统。本文将介绍如何使用Python实现这些功能,并提供详细的代码示例。所需工具......
  • python框架之Flask
    之前写过有关flask-restful: https://www.cnblogs.com/xingxia/p/flask_restful.html虽然早期使用python进行web应用搭建的使用该框架,但是好像很少总结,在此记录一下 [安装]pip3installflask [使用]#导入类库fromflaskimportFlask#创建实例......
  • Python 搜索和抓取
    我有一个问题想知道是否值得花时间尝试用Python来解决。我有一个包含鱼类学名的大型CSV文件。我想将该CSV文件与大型鱼类形态信息数据库(www.fishbase.ca)交叉引用,并让代码返回每条鱼的最大长度。基本上,我需要创建代码来搜索Fishbase网站上的每条鱼,然后找到页面上的最......
  • 《最新出炉》系列入门篇-Python+Playwright自动化测试-54- 上传文件(input控件) - 上篇
    1.简介在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等。所以宏哥打算按上传文件的分类对其进行一下讲解和分享。2.上传文件的API(input控件)Playwright是一个现代化的自动化测试工具,它支持多种浏览器和操作系统,可以帮助开发人员和......
  • python requests 报错 Caused by ProxyError ('Unable to connect to proxy', OSError
    背景:访问https接口,使用http代理版本:requests:2.31.0 从报错可以看出,是proxy相关的报错调整代码,设定不使用代理,将http与https对应的proxy值置空即可(尝试过proxies={},但此写法不生效)proxies={'http':'','https':''}response = requests.get('https://xxx......
  • python基础函数
    1.为什么使用函数使用函数的目的是去减少代码的冗余性,简化代码的复杂度2.如何去定义一个函数以def开头去进行相关的定义在def的后面我们就去以见明知意的方式去定义一个函数的名称在函数名称后面的括号中去添加参数值,可以是多个参数,也可以是无餐的3.函数的调用无参多......
  • 不使用 + 或 - 运算符 | 添加 2 个数字Python
    我一直在尝试编写逻辑,但测试用例失败。如何改进我的代码?代码:#Giventwointegersaandb,returnthesumofthetwointegerswithoutusingtheoperators+and-.a=-1b=1min_val=min(a,b)max_val=max(a,b)ifmin_val==max_val:pr......
  • python 中的智能 Cisco IOS 差异
    之前:hostnameFoo!interfaceGigabitEthernet1/1switchportmodetrunkswitchporttrunkallowedvlan10,20,30!interfaceGigabitEthernet1/2ipaddress192.0.2.1255.255.255.128noipproxy-arp!之后:hostnameFoo!interfaceGigabitEt......
  • 无法编译 Arduino ESP32 代码:.../python3: exec 格式错误
    昨天我使用MacOSArduinoIDE或VSCode编译Arduino草图没有任何问题。但今天什么也编译不了。我尝试在ArduinoIDE或带有Arduino扩展的VSCode中编译的任何草图都会出现此错误:fork/exec/Library/Frameworks/Python.framework/Versions/3.11/bin/python3:exec......