我只是尝试使用键盘键从左到右移动图像。我尝试创建一个从 Image 继承的名为movableImage的类。我认为这是我做错的地方,特别是init函数。当我运行下面的代码时,我在第 16 行收到 AttributeError: 'function' object has no attribute 'widget'。我在这里做错了什么?
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.image import Image
from kivy.input.motionevent import MotionEvent
from kivy.core.window import Window
class character(Widget):
pass
class moveableImage(Image):
def __init__(self, **kwargs):
super(moveableImage, self).__init__(**kwargs)
self._keyboard = Window.request_keyboard
if self._keyboard.widget:
# If it exists, this widget is a VKeyboard object which you can use
# to change the keyboard layout.
pass
self._keyboard.bind(on_key_down=self._on_keyboard_down)
def on_keyboard_down(self, keyboard, keycode, text, modifiers):
if keycode[1] == …Run Code Online (Sandbox Code Playgroud) 我正在尝试在小部件上添加一个按钮并将该按钮绑定到一个函数。与此同时,我正在on_touch_down举办一个活动。
但是,当我按下按钮时,它不会调用该功能;相反,它调用on_touch_down事件。
我怎样才能解决这个问题?
import kivy
kivy.require('1.0.8')
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
class a(Widget):
def on_touch_down(self, touch):
print("touch x is ", touch.x)
print("touch y is ", touch.y)
def update(self,dt):
print("updated")
class mainApp(App):
def build(self):
print("Hi, I am build function")
parent = a()
self.Startbtn = Button(text='Start')
parent.add_widget(self.Startbtn)
self.Startbtn.bind(on_release=self.Loop1)
#Clock.schedule_interval(parent.update, 10.0/1000 )
return parent
def Loop1(self,dt):
print("Hi, this is Loop function")
self.v=1
if __name__ == '__main__':
mainApp().run()
Run Code Online (Sandbox Code Playgroud) 嗯,问题很简单.在家里我有三台计算机,其中两台很老,带有集成显卡,不支持OpenGL 2.0.现在,我想知道这是否常见,所以我知道我是否应该为Kivy开发,因为OpenGL 2.0似乎是强制性的.
我知道玩游戏的人通常都有能够运行我用Kivy制作的任何应用程序的计算机,但如果它是非游戏应用程序,会不会有很多人无法运行它?
我如何使用 eval 在其他类中创建类定义?
evalstr = str("class MyScreen(Screen):\n\tpass\n")
eval(evalstr)
Run Code Online (Sandbox Code Playgroud)
我想在其他类方法中执行此代码。但它返回一个错误。
假设我正在制作一个健身应用程序,您可以在其中进行锻炼。当您配置好锻炼后,您会想要保存它。如何添加此功能,以便当他退出应用程序并再次打开时,他可以查看自己的锻炼?
我专门在 Android 上工作。
这可用于保存本地游戏保存和数据。
我没有找到如何用 kivy 语言强制窗口大小。(例如:800x600p)
你能帮助我吗 ?
谢谢阅读。
PITO2901
我正在使用 64x64 图块创建“地图编辑器”。当我单击并更改位置的磁贴时,我需要我的画布进行更新。我最初将画布设置为
with self.canvas:
Rectangle(source = 'image.png')
Run Code Online (Sandbox Code Playgroud)
在一个班级,然后在我的 touch_down 班级我打电话
with self.canvas:
Rectangle(source = 'newImage.png')
Run Code Online (Sandbox Code Playgroud)
在我更改图像以更新它之后。
我已经能够更新它,但我每次都必须创建一个新图像,它似乎不会更新,因为我已经添加了具有该特定源图像的矩形,并且没有看到图像已更改?
回应 Ryan P
依然没有。我试过这个
Class mypaintwidget(Widget): #This is added as a widget to my layout
def on_touch_down(self, touch):
with self.canvas:
self.rect = Rectangle(source = 'image.png')
tilepng = pil.open('64x64tile.png') #pil is Python Image Library
tilemap = pil.open('image.png')
tilemap.paste(tilepng,location)
tilemap.save('newimage.png')
self.rect.source = 'newimage.png'
Run Code Online (Sandbox Code Playgroud)
它只会更新一次。然后什么都没有(但仍会保存该图像,但不会向我展示。
在 Kivy 中,Popup 显示为灰色,应更改为红色
我的弹出代码:
class MyPopup(Popup):
def show_popup(self):
content = BoxLayout(orientation="vertical")
content.add_widget(Label(text="Game Over", font_size=20))
mybutton_cancel = Button(text="Cancel", size_hint_y=None)
content.add_widget(mybutton_cancel)
mypopup = Popup(content = content,
title = "oops",
auto_dismiss = False,
size_hint = (.5, .5))
mybutton_cancel.bind(on_release=mypopup.dismiss)
mypopup.open()
Run Code Online (Sandbox Code Playgroud)
我希望,很明显我在谈论弹出颜色而不是弹出窗口或弹出文本颜色后面的背景屏幕颜色。我说的是弹出矩形的颜色。请指教。
我有一个简单的工作代码,它显示 2 张图像,但是我希望它在浏览文件后显示。
我的代码:
from kivy.uix.image import Image
from kivy.uix.floatlayout import FloatLayout
from kivy.app import App
from kivy.uix.scatter import Scatter
class CanvasApp(App):
def build(self):
f = floatlayout()
s = Scatter()
s1 = Scatter()
img_1 = Image(source='img0.jpg',pos=(10,280), size=(300,300))
img_2 = Image(source='img1.jpg',pos=(350,280), size=(300,300))
f.add_widget(s)
s.add_widget(img_1)
f.add_widget(s1)
f.add_widget(img_2)
return f
if __name__ == '_main__':
CanvasApp().run()
Run Code Online (Sandbox Code Playgroud)
上面代码中的问题: 1. 如何使用文件浏览器在源中提供路径,我对文件浏览器的了解,
from os.path import sep, expanduser, isdir, dirname
user_path = expanduser('~') + sep + 'Documents'
browser = FileBrowser(select_string='Select',
favorites=[(user_path, 'Documents')])
Run Code Online (Sandbox Code Playgroud)
我如何为两个图像独立使用 scatter 。在上述方法中,我只能在 img0.jpg 上使用分散属性
我无法通过绑定到按钮的方法中的root.ids.created_in_kv.created_in_py访问动态创建的子项。当我检查root.ids.created_in_kv.ids字典时它是空的,但是root.ids.created_in_kv.children 中有孩子
我想要实现的是创建一个充当多选器的弹出窗口。它将接受可能的选择并动态创建标签-复选框对并将其添加到弹出内容中,并且在“应用”按钮上它将仅返回选择的列表(str())。
我不能在 kv 中构建带有多个小部件的弹出窗口,但以下工作(建议使其“更好”而不是受欢迎):
电压代码:
<SelectorPopup>:
title: 'empty'
BoxLayout:
id: inside
orientation: 'vertical'
BoxLayout:
id: options
BoxLayout:
id: buttons
orientation: 'vertical'
Button:
text: 'Apply'
on_release: root.return_selected()
Button:
text: 'Cancel'
on_release: root.dismiss()
<LabeledCheckbox@BoxLayout>:
id: entity
CheckBox:
id: choice
Label:
text: root.id
Run Code Online (Sandbox Code Playgroud)
我正在创建标签-复选框对(打包在 GridLayout 中)并将其放入选项 BoxLayout的 python 代码:
class SelectorPopup(Popup):
def return_selected(self):
selected=[]
a = self.ids.inside.options.choices.ids # dict is empty
for item in a.keys():
selected.append(item) if a[item].ids.choice.value #add if checkbox …Run Code Online (Sandbox Code Playgroud) kivy ×10
python ×9
android ×1
canvas ×1
eval ×1
oop ×1
opengl-es ×1
popup ×1
properties ×1
python-2.7 ×1