Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建一个kivy应用程序,在一个屏幕上获取用户的输入,并在另一个屏幕上显示这些图像_Python_File Upload_Pycharm_Kivy_Kivymd - Fatal编程技术网

Python 创建一个kivy应用程序,在一个屏幕上获取用户的输入,并在另一个屏幕上显示这些图像

Python 创建一个kivy应用程序,在一个屏幕上获取用户的输入,并在另一个屏幕上显示这些图像,python,file-upload,pycharm,kivy,kivymd,Python,File Upload,Pycharm,Kivy,Kivymd,我正在尝试创建一个应用程序,它可以在我的电脑中显示特定路径的图像。 我想根据用户输入显示这些图像。让我们假设用户给出了一个数字5,那么它将在该路径中随机显示5个图像。这里是一个基本的示例应用程序,它应该使用纯python(无KV语言)完成您要求的操作。只是说,当显示图像时,你可能需要考虑添加一个ScView视图来查看完整的图像。目前,我通过指定size\u提示(.3,.3)来“缩小”它们。另外,如果您想找到一种更好的方法来过滤非图像文件,我通过检查文件路径是否以“.jpg”或“.png”结尾创建

我正在尝试创建一个应用程序,它可以在我的电脑中显示特定路径的图像。
我想根据用户输入显示这些图像。让我们假设用户给出了一个数字5,那么它将在该路径中随机显示5个图像。

这里是一个基本的示例应用程序,它应该使用纯python(无KV语言)完成您要求的操作。只是说,当显示图像时,你可能需要考虑添加一个ScView视图来查看完整的图像。目前,我通过指定
size\u提示(.3,.3)
来“缩小”它们。另外,如果您想找到一种更好的方法来过滤非图像文件,我通过检查文件路径是否以“.jpg”或“.png”结尾创建了一个基本过滤器,您可以使用这个正则表达式或使用glob库

import os, random

from kivy.app import App
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.stacklayout import StackLayout
from kivy.uix.textinput import TextInput
from kivy.uix.image import Image
from kivy.properties import ListProperty, NumericProperty

class Screen2(Screen):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.layout = StackLayout()
        self.random_image_number = App.get_running_app().images_num
        self.images_paths = App.get_running_app().images_paths
        self.random_paths = random.choices(self.images_paths, k=self.random_image_number)

        for path in self.random_paths:
            # You may wanna change the size_hint or add a scrollview if you want full size images
            img = Image(source=path,size_hint=(.3,.3))
            self.layout.add_widget(img)

        self.add_widget(self.layout)

class Screen1(Screen):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        # Add your path here
        self.image_path = os.path.join("C:\\Users\\dimit\\Pictures")
        self.layout = RelativeLayout()
        self.input_bar = TextInput(multiline=False, size_hint=(0.4, 0.1), pos_hint={"center_x":.5, "center_y":.5}, hint_text="How many images to show", input_type="number")
        self.input_bar.bind(on_text_validate=self.get_images)
        self.layout.add_widget(self.input_bar)
        self.add_widget(self.layout)

    # inst refers to the input bar object
    def get_images(self, inst):
        App.get_running_app().images_num = int(inst.text)
        for fname in os.scandir(self.image_path):
            # Skip any directories
            if fname.is_dir():
                continue
            
            # Filter for images 
            if fname.path.endswith(".jpg") or fname.path.endswith(".png"):
                App.get_running_app().images_paths.append(fname.path)

        # This line needs to be here, because if you add the screen in the build method, it wont add the images
        App.get_running_app().screen_manager.add_widget(Screen2(name="Image Display Page"))

        # Changes screen to image display screen 
        App.get_running_app().screen_manager.current = "Image Display Page"

class ImageApp(App):
    images_paths = ListProperty([])
    images_num = NumericProperty(0)
    def build(self):
        self.title = "Image Display App"
        self.screen_manager = ScreenManager()
        self.screen_manager.add_widget(Screen1(name="Home Page"))
    
        return self.screen_manager


if __name__ == "__main__":
    ImageApp().run()
        

这就是我得到的错误:回溯(最近一次调用最后一次):文件“C:/Users/harsh/PycharmProjects/pythonProject1/venv/WiseTime.py”,第5行,在从kivymd.uix.MDRelativeLayout导入MDRelativeLayout ModuleNotFoundError:没有名为'kivymd.uix.MDRelativeLayout'的模块完成,退出代码为1您是否安装了kivymd?@SriHarsha当我阅读您的问题时,我以为您想使用。我编辑了我的答案,所以它将只使用Kivy而不是KivyMD导入。