我正在制作一个GUI,其中有一个生成Labels的函数,并且我想让用户也可以更改那些Label的文本。
但是这让我头疼不已,因此我尝试了较小的尝试,创建了一个标签,该标签显示了创建的标签数量,并且尝试使用不同的解决方案来更新“新数量标签文本”,但是没有运气。 / p>
我尝试线程化但是失败了。然后我在Kivy中尝试了Clock Object,但是我也失败了,因为那些不起作用,我没有失败,这是因为我是编程的新手,我并没有真正理解它们。 py:
class Screen_two(Screen):
productsamount = StringProperty(None)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
Clock.schedule_once(self.update_amount_label, 0)
def update_amount_label(self, dt):
n = 0
for i in db.databaseDict.items():
n += 1
self.ids.productsamount.text = 'Amount of goods: {}'.format(n)
kv:
<Screen_two>:
productsamount: productsamount
Label:
font_size:'11dp'
id:productsamount
编辑1:
我想使用def add_product(self):
函数来更改“标签”文本。
class addbut_popup(FloatLayout):
addprodname = ObjectProperty(None)
addprodprice = ObjectProperty(None)
def print_to_consol(self):
print('Added.')
def add_product(self):
if self.addprodname.text != "" and '.' not in self.addprodname.text:
if re.findall(r'\D', self.addprodprice.text) == []:
db.add_product(self.addprodname.text, self.addprodprice.text)
self.print_to_consol()
self.reset()
else:
invalid()
self.reset()
else:
invalid()
self.reset()
def reset(self):
self.addprodname.text = ''
self.addprodprice.text = ''
Edit2:
我不想一次更改标签的文本,但是我想每次调用一个函数(按钮按下)时更改标签的文本:例如,每当我在文本输入中写东西并按下按钮时,我都想更改标签的文本文本到我在Textinput中编写的内容,不仅一次,而且每次按下按钮时都可以。 (对不起,让自己不清楚(英语不是我的母语))
答案 0 :(得分:1)
这是您修改的代码版本,可以执行您想要的操作:
from kivy.app import App
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.properties import StringProperty
from kivy.uix.screenmanager import Screen, ScreenManager
class Screen_two(Screen):
# StringProperty that will be the Label text
productsamount = StringProperty('This is going to change')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# change label after 5 seconds
Clock.schedule_once(self.update_amount_label, 5)
def update_amount_label(self, dt):
n = 0
for i in range(5):
n += 1
# update label text
self.productsamount = 'Amount of goods: {}'.format(n)
Builder.load_string('''
<Screen_two>:
Label:
text: root.productsamount # use the StringProperty for Label text
font_size:'11dp'
''')
class tmpApp(App):
def build(self):
sm = ScreenManager()
sm.add_widget(Screen_two(name='screen2'))
return sm
tmpApp().run()
答案 1 :(得分:1)
尝试类似这样的方法。您具有对事件具有本机支持的按钮。
例如,它具有“ on_press”或“ on_release”。对于这些事件,您可以附加将被触发的功能。
py:
class Screen_two(Screen):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def update_amount_label(self):
n = 0
for i in db.databaseDict.items():
n += 1
self.ids.productsamount.text = 'Amount of goods: {}'.format(n)
kv:
<Screen_two>:
productsamount: productsamount
Label:
font_size:'11dp'
id:productsamount
Button:
on_press: root.update_amount_label()
ps:我没有测试过,但是我认为它应该可以工作
答案 2 :(得分:1)
本教程可能会帮助您解决以下问题: https://www.youtube.com/watch?v=-NvpKDReKyg
答案 3 :(得分:1)
我认为这应该有所帮助
Private Sub Userform_Initialize()
'Empty preset name combo box
presetname.value = ""
With Sheet6
Range("A2", Range("A" & Rows.count).end(xlUp)).name = "presetnamerange"
End With
Me.presetname.rowsource = "presetnamerange"
End Sub
'I have a sub for the combo box but I'm not sure what to put in it
Sub presetname_change()
With Sheet6
'????
End With
End Sub
这将帮助您更好地理解