繁体   English   中英

图片按钮 Kivy

[英]Image Buttons Kivy

尝试从 LauncherApp() 内的 ImageButton 调用 vsOpen;目标是制作具有响应输入的图像的按钮。 调用 VsOpen 表示如果将 self 放入,我将缺少 self 作为参数,我收到“ImageButton 没有属性 self”。 正如您在下面看到的,我的按钮正常工作,但是我似乎无法正确创建按钮图像。 有人愿意解释我将如何处理这个问题吗?

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout 
from kivy.config import Config
from kivy.uix.image import Image
from kivy.uix.button import Button
from kivy.uix.behaviors import ButtonBehavior
from cryptography.fernet import Fernet
from colorama import Fore, Style
import webbrowser as browser
import subprocess
import os

PATHs=[#other_program_names/locations_go_here]

class ImageButton(ButtonBehavior, Image):  
            def on_press(self):  
                for x in range(0, 2):
                    iD=Fernet.generate_key()
                    cipher = Fernet(iD)
                    url = input(">")
                    crypt_url=cipher.encrypt(bytes(url, "utf-8"))
                    if url != "":
                        if url.startswith("www.", 0,4):
                            dcrypt_url=cipher.decrypt(bytes(crypt_url))
                            browser.open_new_tab(dcrypt_url)
                            print(Fore.BLUE+"Accessing " + url + "..")
                        else:
                            print("String given was not a url")
                            quit
                    else:
                        print(Fore.RED+">no url was entered..")
                        quit

            def vsOpen(self):
                try:
                    if os.path.isfile(PATHs[0]) == 1:
                        self.x=subprocess.call(PATHs[0])
                    else:
                        print(Fore.RED+"vsCode was not found"+Style.BRIGHT)
                except TypeError:
                    print("Type error has occured at vsOpen")
                    quit


        class LauncherApp(App):
            def build(self):
                layout=FloatLayout(size=(200,200))
                #Normal Buttons were here
                layout.add_widget(ImageButton.vsOpen())
                layout.add_widget(ImageButton.on_press())
                return layout

root = LauncherApp()
if __name__ == "__main__":
    root.run()
layout.add_widget(ImageButton.vsOpen())

我不确定你希望它做什么,但这没有意义。 vsOpen是的ImageButton类的方法,你应该只从一个类的实例调用它,而不是类本身(除非你知道自己在做什么,有一个很好的理由)。

即使这以某种方式运行了该方法,它也不会返回您可以添加到布局中的小部件,因此不清楚您实际想要实现的目标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM