Kivy 在尝试使用 kv 文件时显示黑屏?

问题描述 投票:0回答:3

所以我想在外部 .kv 文件中设置我的 Kivy 应用程序的样式,但是当我运行主代码时,黑色的 Kivy 窗口中什么也没有出现。

这是我的主文件 main.py

import kivy
from kivy.app import App
from kivy.uix.widget import Widget

class MyGrid(Widget):
    pass
    
class MyApp(App):
    def build(self):
        return MyGrid()

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

这是位于同一目录中的 .kv 文件,名为 my.kv

#:kivy 2.0.0
<MyGrid>:
    Label:
        text: "example example"

所以我没有收到任何错误,当我运行主代码时,Kivy GUI 中什么也没有出现。

为什么会这样,如何解决?

python user-interface kivy kivy-language
3个回答
2
投票

为了从单独的kivy文件中加载小部件,您需要导入

Builder

from kivy.lang.builder import Builder
Builder.load_file('my.kv')

或在 .py 文件中

Builder.load_string("""
<MyGrid>:
    Label:
        text: "example example"
""")

1
投票

kivy 文件名应始终为 App 类名,在您的情况下,您应该使用 MyApp.kv 保存文件 否则你需要使用 Builder 导入


0
投票

来自 tkinter 导入 *

进口基维

kivy.require("1.9.1")

从 kivy.app 导入 App

将 tkinter.font 导入为字体

从 tkinter 导入 Tk,Button

进口操作系统

os.environ['KIVY_GL_BACKEND'] = 'angle_sdl2'

root = Tk()

root.geometry("184x361")

size = font.Font(family="Helvetica")

def add_text(文本):

"""Adds the specified text to the entry box."""




entry_box.insert(END, text)

entry_box = Entry(root, width=30, borderwidth=2)

entry_box.grid(row=0, column=0, columnspan=10, padx=0, pady=0, sticky=N)

定义一个():

entry_box.insert(END, "1")

定义二():

entry_box.insert(END, "2")

定义三():

entry_box.insert(END, "3")

定义四():

entry_box.insert(END, "4")

定义五():

entry_box.insert(END, "5")

定义六():

entry_box.insert(END, "6")

def 七():

entry_box.insert(END, "7")

定义八():

entry_box.insert(END, "8")

定义九():

entry_box.insert(END, "9")

定义零():

entry_box.insert(END, "0")

def c():

entry_box.delete(0, END)

def per():

entry_box.insert(END, "- 100")

def 划分():

entry_box.insert(END, "/")

def乘法():

entry_box.insert(END, "*")

定义点():

entry_box.insert(END, ".")

def 删除():

entry_box.delete(len(entry_box.get())-1, END)

定义子():

entry_box.insert(END, "-")

def 添加():

entry_box.insert(END, "+")

def 等于():

try:
    result = eval(entry_box.get())
    entry_box.delete(0, END)
    entry_box.insert(END, result)
except ZeroDivisionError:
    entry_box.delete(0, END)
    entry_box.insert(END, "Cannot divide by zero")
except SyntaxError:
    entry_box.delete(0, END)
    entry_box.insert(END, "Invalid expression")

def 括号():

entry_box.insert(END, "()")

def 计算():

try:
    result = eval(entry_box.get())
    entry_box.delete(0, END)
    entry_box.insert(END, result)
except ZeroDivisionError:
    entry_box.delete(0, END)
    entry_box.insert(END, "Cannot divide by zero")
except SyntaxError:
    entry_box.delete(0, END)
    entry_box.insert(END, "Invalid expression")

ButtonApp 类(应用程序):

def build(self):

    self.b1 = Button(bg="black", fg="yellow", text="C", width=4, height=3, command=c)
    self.b1.grid(row=1, column=1, padx=0, pady=0)
    self.b1["font"] = size

    self.b2 = Button(bg="black", fg="white", text="7", width=4, height=3, command=seven)
    self.b2.grid(row=2, column=1, padx=0, pady=0)
    self.b2["font"] = size

    self.b3 = Button(bg="black", fg="white", text="4", width=4, height=3, command=four)
    self.b3.grid(row=3, column=1, padx=0, pady=0)
    self.b3["font"] = size

    self.b4 = Button(bg="black", fg="white", text="1", width=4, height=3, command=one)
    self.b4.grid(row=4, column=1, padx=0, pady=0)
    self.b4["font"] = size

    self.b5 = Button(bg="black", fg="white", text="%", width=4, height=3, command=per)
    self.b5.grid(row=5, column=1, padx=0, pady=0)
    self.b5["font"] = size

    self.b6 = Button(bg="black", fg="yellow", text="➗", width=4, height=3, command=divide)
    self.b6.grid(row=1, column=2, padx=0, pady=0)
    self.b6["font"] = size

    self.b7 = Button(bg="black", fg="white", text="8", width=4, height=3, command=eight)
    self.b7.grid(row=2, column=2, padx=0, pady=0)
    self.b7["font"] = size

    self.b8 = Button(bg="black", fg="white", text="5", width=4, height=3, command=five)
    self.b8.grid(row=3, column=2, padx=0, pady=0)
    self.b8["font"] = size

    self.b9 = Button(bg="black", fg="white", text="2", width=4, height=3, command=two)
    self.b9.grid(row=4, column=2, padx=0, pady=0)
    self.b9["font"] = size

    self.b10 = Button(bg="black", fg="white", text="0", width=4, height=3, command=zero)
    self.b10.grid(row=5, column=2)
    self.b10["font"] = size

    self.b11 = Button(bg="black", fg="yellow", text="✖", width=4, height=3, command=multiply)
    self.b11.grid(row=1, column=3, padx=0, pady=0)
    self.b11["font"] = size

    self.b12 = Button(bg="black", fg="white", text="9", width=4, height=3, command=nine)
    self.b12.grid(row=2, column=3, padx=0, pady=0)
    self.b12["font"] = size

    self.b13 = Button(bg="black", fg="white", text="6", width=4, height=3, command=six)
    self.b13.grid(row=3, column=3, padx=0, pady=0)
    self.b13["font"] = size

    self.b14 = Button(bg="black", fg="white", text="3", width=4, height=3, command=three)
    self.b14.grid(row=4, column=3, padx=0, pady=0)
    self.b14["font"] = size

    self.b15 = Button(bg="black", fg="white", text=".", width=4, height=3, command=dot)
    self.b15.grid(row=5, column=3, padx=0, pady=0)
    self.b15["font"] = size

    self.b16 = Button(bg="black", fg="yellow", text="<x", width=4, height=3, command=delete)
    self.b16.grid(row=1, column=4, padx=0, pady=0)
    self.b16["font"] = size

    self.b17 = Button(bg="black", fg="white", text="➖", width=4, height=3, command=sub)
    self.b17.grid(row=2, column=4, padx=0, pady=0)
    self.b17["font"] = size

    self.b18 = Button(bg="black", fg="white", text="➕", width=4, height=3, command=add)
    self.b18.grid(row=3, column=4, padx=0, pady=0)
    self.b18["font"] = size

    self.b19 = Button(bg="green", fg="white", text="a", width=4, height=7, command=equal)
    self.b19.grid(row=4, column=4, rowspan=5)
    self.b19["font"] = size

如果按钮==“C”:

Button_command = c

elif 按钮 == "=":

Button_command = equal

def key_press(事件):

"""Handles key presses."""

key = event.char

if key in ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ".", "/", "*", "-", "+"]:

    add_text(key)

elif key == "\r":

    calculate()

elif key == "\x08":

    entry_box.delete(len(entry_box.get())-1, END)

root.bind("", key_press)

ButtonApp().run()

这是一个基本的计算器程序。当我运行这个程序时,它只显示黑屏,我不知道为什么会这样。谁能帮帮我

© www.soinside.com 2019 - 2024. All rights reserved.