gpt4 book ai didi

python - 如何使用 Kivy 的 FileChooser 选择多个文件?

转载 作者:行者123 更新时间:2023-11-30 22:11:52 24 4
gpt4 key购买 nike

我正在使用 kivy 和 python 来构建一个应用程序。

我正在尝试构建一个应用程序,在该应用程序中我可以选择多个图像,将它们添加到一个数组中,然后通过另一个缝合图像的方法(使用缝合器类)传递该图像数组。输出图像将显示在三个屏幕之一上(我也想删除中间屏幕)。

所以本质上我想要帮助的是如何能够使用 kivy 中的文件选择器选择多个文件,然后将这些文件添加到数组中,稍后我可以通过不同的方法传递。

在@ikolim的帮助下this post ,我已经能够创建该应用程序。

ma​​in.py

from kivy.app import App
from kivy.uix.tabbedpanel import TabbedPanel
from kivy.properties import ObjectProperty
from PIL import Image


class RootWidget(TabbedPanel):
manager = ObjectProperty(None)
img = ObjectProperty(None)
img3 = ObjectProperty(None)
img4 = ObjectProperty(None)
lab = ObjectProperty(None)

def on_touch_up(self, touch):
if not self.img3.collide_point(*touch.pos):
return True
else:
self.lab.text = 'Pos: (%d,%d)' % (touch.x, touch.y)
return True

def switch_to(self, header):
# set the Screen manager to load the appropriate screen
# linked to the tab head instead of loading content
self.manager.current = header.screen

# we have to replace the functionality of the original switch_to
self.current_tab.state = "normal"
header.state = 'down'
self._current_tab = header

def select_to(self, *args):
try:
print(args[1][0])
iw = Image.open(args[1][0])
iw.save('./phase.jpg')
gray = iw.convert('1')
gray.save('./gray_im.jpg')
self.img3.source = './gray_im.jpg'
self.img4.source = './gray_im.jpg'
self.img.source = './phase.jpg'
self.img.reload()
self.img3.reload()
self.img4.reload()
except:
pass

def update_touch_label(self, label, touch):
label.text = 'Pos:(%d, %d)' % (touch.x, touch.y)
label.texture_update()
label.pos = touch.pos
label.size = label.texture_size[0] + 20, label.texture_size[1] + 20


class TestApp(App):
title = 'Screen Widget'

def build(self):
return RootWidget()

def on_pause(self):
return True


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

测试.kv

#:kivy 1.10.1

<RootWidget>:
manager: manager
img: img
img3: img3
img4: img4
lab: lab
do_default_tab: False

ScreenManager:
id: manager

Screen:
id: sc1
name:'Load img'

FileChooserIconView:
canvas.before:
Color:
rgb: 0.5, 0.4, 0.5
Rectangle:
pos: self.pos
size: self.size
on_selection:
root.select_to(*args)

Screen:
id: sc2
name: 'Image'

FloatLayout:
Button:
id: lab
pos_hint: {"right": 0.55, 'top': 1}
size_hint: .15,0.1

RelativeLayout:
Image:
id: img
on_touch_down:
str('Relative:{}'.format(args[1].pos))
pos_hint: {"left": 1, 'bottom': 1}
size_hint: 0.5, 1
allow_stretch: True

RelativeLayout:
Image:
id: img3
pos_hint: {"right": 1, 'bottom': 1}
size_hint: 0.5, 1
allow_stretch: True

Screen:
id: sc3
name: 'Image_'

FloatLayout:
Image:
id: img4
keep_data: True
post: self.pos
size: self.size

TabbedPanelHeader:
text: sc1.name
background_color: 1, 0, 0, 1
screen: sc1.name

TabbedPanelHeader:
text: sc2.name
background_color: 1, 1, 0, 1
screen: sc2.name

TabbedPanelHeader:
text: sc3.name
background_color: 1, 0, 1, 1
screen: sc3.name

最佳答案

在 Test.kv 文件中的 FileChooserIconView 之后:添加 multiselect: True

FileChooserIconView:
multiselect: True

这将允许选择多个文件。

如果您使用 FileChooserListView 而不是 FileChooserIconView,文件选择器窗口将不会在视觉上区分选定/未选定的文件。您仍然可以选择多个文件,但需要记住所选的文件。第一次单击选择,第二次单击取消选择。我希望这个小部件的开发者能够尽快纠正这个问题。

关于python - 如何使用 Kivy 的 FileChooser 选择多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51294999/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com