Python 3.x For循环中的kivy按钮事件
我希望在for循环中创建按钮。我的问题出在on_press属性上。 我读过关于闭包的东西(如果这是问题的话)。但我真的不明白 一点帮助。谢谢你的英语 .py代码:Python 3.x For循环中的kivy按钮事件,python-3.x,kivy,Python 3.x,Kivy,我希望在for循环中创建按钮。我的问题出在on_press属性上。 我读过关于闭包的东西(如果这是问题的话)。但我真的不明白 一点帮助。谢谢你的英语 .py代码: import kivy import webbrowser from kivy.app import App from kivy.uix.button import Label, Button from kivy.uix.boxlayout import BoxLayout word_list = ['one', 'two',
import kivy
import webbrowser
from kivy.app import App
from kivy.uix.button import Label, Button
from kivy.uix.boxlayout import BoxLayout
word_list = ['one', 'two', 'three', 'four']
class LoopButton(BoxLayout):
def aff(self):
for w in word_list:
url = 'https://fr.wiktionary.org/wiki/' + w
button = Button(text= w, on_press= webbrowser.open(url))
self.ids.grid.add_widget(button)
class TestApp(App):
def build(self):
return LoopButton()
if __name__ == '__main__':
TestApp().run()
和千伏
#:kivy 1.10
<LoopButton>
Label:
text: 'TEST'
Button:
id: 'affiche'
text: 'afficher'
on_press: root.aff()
GridLayout:
id: grid
cols: 2
#:kivy 1.10
标签:
文本:“测试”
按钮:
身份证:“阿菲什”
文字:“阿菲彻”
按:root.aff()
网格布局:
id:网格
科尔斯:2
问题
on_press=webbrowser.open(url)
将在实例化/创建按钮小部件时打开webbrowser
解决方案
按回调方法创建一个,并在回调方法中创建url
一小条
通常,属性回调使用2个参数调用(对象)
属性的新值)和带有一个参数的事件回调
(对象)
输出
问题
on_press=webbrowser.open(url)
将在实例化/创建按钮小部件时打开webbrowser
解决方案
按
回调方法创建一个,并在回调方法中创建url
一小条
通常,属性回调使用2个参数调用(对象)
属性的新值)和带有一个参数的事件回调
(对象)
输出
on\u press希望您传递回调,并且您正在向它传递求值函数,因此有3种可能的解决方案
使用functools.partial
:
import kivy
import webbrowser
from functools import partial
...
class LoopButton(BoxLayout):
def aff(self):
for w in word_list:
url = 'https://fr.wiktionary.org/wiki/' + w
button = Button(text= w, on_press=partial(webbrowser.open, url))
...
使用lambda
:
button = Button(text= w, on_press= lambda *args, url=url: webbrowser.open(url))
创建回调:
class LoopButton(BoxLayout):
def aff(self):
for w in word_list:
button = Button(text= w, on_press=self.callback)
self.ids.grid.add_widget(button)
def callback(self, instance):
url = 'https://fr.wiktionary.org/wiki/' + instance.text
webbrowser.open(url)
on_press希望您传递一个回调,并且您正在向它传递求值函数,因此有3种可能的解决方案
使用functools.partial
:
import kivy
import webbrowser
from functools import partial
...
class LoopButton(BoxLayout):
def aff(self):
for w in word_list:
url = 'https://fr.wiktionary.org/wiki/' + w
button = Button(text= w, on_press=partial(webbrowser.open, url))
...
使用lambda
:
button = Button(text= w, on_press= lambda *args, url=url: webbrowser.open(url))
创建回调:
class LoopButton(BoxLayout):
def aff(self):
for w in word_list:
button = Button(text= w, on_press=self.callback)
self.ids.grid.add_widget(button)
def callback(self, instance):
url = 'https://fr.wiktionary.org/wiki/' + instance.text
webbrowser.open(url)
你能澄清你的问题是什么吗?你能澄清你的问题是什么吗?