【发布时间】:2019-11-06 12:08:50
【问题描述】:
我正在尝试创建一个标准数字小键盘,当用户触摸屏幕上的文本输入时会弹出该小键盘,以便用户无需使用鼠标和键盘即可输入数字值。我正在关注this 允许输入到一个文本框中的问题,但是当尝试使用它在多个文本输入中输入值时,我无法让程序正常运行。我仅限于使用 Python,而不是 Kivy 语言,因此我可以理解它有点笨拙。
我的计划是为气泡 (inputBubble)、气泡按钮 (inputBubbleButtons) 和文本输入框 (text_inputs) 创建一个类,其中 text_inputs 小部件从 RHS() 调用函数(我的主要布局之一)那应该显示气泡。我似乎无法从 test.kv 文件中复制 app.root.text_input.text += self.text,所以我当前的错误是“text_inputs 对象没有属性'bubblein'”,我想不出有一种方法可以超越这一点。
import kivy
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.bubble import Bubble, BubbleButton
class inputBubble(Bubble):
def __init__(self, **kwargs):
super(inputBubble, self).__init__(**kwargs)
inputGrid = GridLayout(cols = 3)
keypad_numbers = ['7', '8', '9', '4', '5', '6', '1', '2', '3', 'CLR', '0', '.']
for x in keypad_numbers:
inputGrid.add_widget = inputBubbleButtons(text = x)
self.add_widget(inputGrid)
class inputBubbleButtons(BubbleButton):
def __init__(self, **kwargs):
super(inputBubbleButtons, self).__init__(**kwargs)
self.on_release = self.buttonfunctions
def buttonfunctions(self):
if self.text != 'CLR':
text_input.text += self.text
else:
text_input.text = '0'
class text_inputs(TextInput):
def __init__(self, **kwargs):
super(text_inputs, self).__init__(**kwargs)
self.id = 'text_input'
self.cursor_blink = False
self.multiline = False
self.on_focus = RHS.show_input(self)
class RHS(BoxLayout):
def __init__(self, **kwargs):
super(RHS, self).__init__(**kwargs)
nangleRow = BoxLayout(orientation = 'horizontal')
self.add_widget(nangleRow)
nangleRow.add_widget(Label(text = 'New Angle'))
nangleInput = text_inputs()
nangleRow.add_widget(nangleInput)
def show_input(self, *l):
if not hasattr(self, 'bubblein'):
bubblein = inputBubble()
self.bubblein.arrow_pos = "bottom_mid"
self.add_widget(bubblein)
class Root(GridLayout):
def __init__(self, **kwargs):
super(Root, self).__init__(**kwargs)
self.cols = 1
self.add_widget(RHS(),0)
class MainWindow(App):
def build(self):
return Root()
if __name__ == '__main__':
MainWindow().run()
我希望当焦点位于 nangleInput 上时这会创建一个气泡,但我收到错误消息“AttributeError: 'text_inputs' object has no attribute 'bubblein'”。
【问题讨论】:
标签: python python-3.x kivy