【问题标题】:Py Program using Kivy Module使用 Kivy 模块的 Py 程序
【发布时间】:2020-03-28 23:21:06
【问题描述】:

想知道我为什么会收到

TypeError:“ObservableList”对象不可调用。当 background_color 被调用时。

除此之外,当 vsCode.background([]) 被删除时,我觉得我遗漏了一些简单的东西,但是我不能指望它提前谢谢你:

TypeError: vsOpen() 接受 1 个位置参数,但给出了 2 个

    import os
    import sys
    import subprocess
    import webbrowser as browser
    from kivy.app import App
    from kivy.uix.gridlayout import GridLayout
    from kivy.uix.image import Image
    from kivy.uix.label import Label
    from kivy.uix.textinput import TextInput
    from kivy.uix.button import Button
    from cryptography.fernet import Fernet
    from colorama import Fore, Style

    class MyApp(App):
        def build(self):
            vsCode=Button(text="vsCode", size=(45,45))
            vsCode.background_normal = ""
            vsCode.background_color([0,255,255,0.85])
            vsCode.bind(on_press=self.vsOpen)
            return vsCode

        def encryption(self, on):
            iD = Fernet.generate_key()
            cipher = Fernet(iD)
            message = input(b">: ")
            e_message = cipher.encrypt(bytes(message, "utf-8"))
            if len(e_message) != 0:
              if on == 1:
                print(e_message)
              else:
                dcrypt = cipher.decrypt(bytes(message, "utf-8"))
                print(dcrypt)
            else:
                print("Encryption is not working.")

        def mURLs(self):
           for x in range(0, 2):
              url = input(">") 
              if len(url)!=0:
                  browser.open_new_tab(url)
                  print(Fore.BLUE+"Accessing " + url + "..")
              else:
                  print(Fore.RED+">no url was entered..")
                  sys.exit()

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

root = MyApp()
if __name__ == "__main__":
    root.run()

【问题讨论】:

    标签: python-3.x class button kivy typeerror


    【解决方案1】:

    background_color 不是一个被调用的方法,它是一个ListProperty。也许您打算使用:

    vsCode.background_color = [0, 255, 255, 0.85]
    

    此外,当您将方法绑定到Button 时,该方法会以Button 实例作为参数调用。因此,您只需将vsOpen() 方法的定义更改为:

    def vsOpen(self, *args):
    

    【讨论】:

      【解决方案2】:

      感谢约翰,这帮助我在处理此问题时感到疲倦并且找不到合适的解决方案。对于查看此问题的其他任何人,应注意在将button 与模块绑定时,应使用self. 在类中调用它以避免未定义名称警告。

      正确使用:

       vsCode.bind(on_press=self.vsOpen)
      

      使用不当:

      vsCode.bind(on_press=self.vsOpen())
      

      【讨论】:

        猜你喜欢
        • 2021-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-21
        • 2017-12-12
        相关资源
        最近更新 更多