Kivy右键菜单

时间:2017-07-29 11:15:14

标签: python python-2.7 user-interface kivy kivy-language

我试图找到一种在Kivy中定期右键单击的方法,但没有任何运气。

我可以找到一种方法来禁用多点触控事物: -

Config.set('input', 'mouse', 'mouse,disable_multitouch')

然后右键单击就像左键单击一样,我需要能够复制,剪切,粘贴等。

我正在制作一种信息中心GUI。

1 个答案:

答案 0 :(得分:1)

enter image description here

检测到右键单击

您可以将on_touch_downif touch.button == 'right':结合使用来检测右键点击。

获取上下文菜单

TextInput有一个方法_show_copy_paste,可以打开一个Bubble作为上下文菜单。

我认为这不可能与Label有关。如果你想实现它。我建议制作自己的标签,启用这些属性并从TextInput中获取想法。

这是相当多的工作。因此,我更喜欢使用TextInput和属性readonly=True。我编写了一个TextInput版本,当右键单击时打开Contextmenu aka Bubbles。这是在下面的示例应用程序中实现的。我在Windows上编码并测试了它。

from kivy.app import App
from kivy.lang import Builder
from kivy.config import Config
from kivy.base import EventLoop
from kivy.uix.textinput import TextInput


Config.set('input', 'mouse', 'mouse,disable_multitouch')



class RightClickTextInput(TextInput):   

    def on_touch_down(self, touch):

        super(RightClickTextInput,self).on_touch_down(touch)

        if touch.button == 'right':
            print("right mouse clicked")
            pos = super(RightClickTextInput,self).to_local(*self._long_touch_pos, relative=True)

            self._show_cut_copy_paste(
                pos, EventLoop.window, mode='paste')


kv_string = Builder.load_string("""
RightClickTextInput:
    use_bubble: True
    text: ('Palimm'*10+"\\n")*40
    multiline: True
    #readonly: True
""")



class MyApp(App):
    def build(self):
        return kv_string

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

Kivy考虑到了移动设备。如果你没有用触摸做任何事情,可能值得查看tkinter。