为了账号安全,请及时绑定邮箱和手机立即绑定

停止弹出和拖动行为

停止弹出和拖动行为

四季花海 2023-07-11 15:59:38
所以我对 Kivy 很陌生,到目前为止非常令人沮丧......无论如何,我现在正在尝试制作一个可以拖动和移动的弹出窗口,但我不明白发生了什么...... ..当我在 onButtonPress 函数中调用 popup.open() 时,弹出窗口可以通过关闭操作关闭,尽管我失去了可拖动功能....当我通过 self.layout.add_widget( 将弹出窗口直接添加到主窗口时弹出窗口),我可以移动弹出窗口,但无法关闭它......我猜 open() 调用正在重新定义可拖动窗口?这是真的?如果不是,发生了什么以及如何解决它?from kivy.app import Appfrom kivy.uix.widget import Widgetfrom kivy.uix.image import Imagefrom kivy.core.window import Windowfrom kivy.uix.behaviors import DragBehaviorfrom kivy.uix.floatlayout import FloatLayout from kivy.uix.popup import Popup class PopupExample(App):     # override the build method and return the root widget of this App       def build(self):         # Define a grid layout for this App         self.layout = FloatLayout()             # Add a button         self.button = Button(text ="Click for pop-up")         self.layout.add_widget(self.button)           # Attach a callback for the button press event                 self.button.bind(on_press = self.onButtonPress)                   return self.layout       def onButtonPress(self, button):        # print('opening')        layout = GridLayout(cols = 1, padding = 10)         img = Image(source="temp_plot.png")        closeButton = Button(text = "Close the pop-up")        layout.add_widget(img)        layout.add_widget(closeButton)        popup = MoveableImage( title ='Demo Popup', content = layout, size_hint =(None, None), size = (400,400))        popup.open()        #self.layout.add_widget(popup)        #closeButton.bind(on_press = self.remove_widget(popup))class MoveableImage(DragBehavior,Popup):    def __init__(self, **kwargs):        super(MoveableImage, self).__init__(**kwargs)        self.drag_timeout = 10000000        self.drag_distance = 0        self.drag_rectangle = [self.x, self.y, self.width, self.height]    def on_pos(self, *args):        self.drag_rectangle = [self.x, self.y, self.width, self.height]    def on_size(self, *args):        self.drag_rectangle = [self.x, self.y, self.width, self.height]
查看完整描述

1 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

如果您想拖动Popup,将其添加到App layout可能是最好的方法。当然,那么你并不真的需要使用Popup,只需使用一些Layout。如果您走这条路,可以通过定义如下绑定Popup来完成删除:Button

closeButton.bind(on_press = lambda x: self.layout.remove_widget(popup))

lambda只是用来吸收添加的按钮实例参数on_press,因此您不会收到有关该remove_widget()方法的参数太多的错误。

该类modalView( 的基类Popup)有一个保持居中的方法PopupDragBehavior如果您覆盖该方法,看起来会起作用。所以,如果您添加:

def _align_center(self, *l):
    pass

到你的MoveableImage班级,我想你就能拖下去了。open()的方法进行一些ModalView绑定以确保_align_center()在任何位置或大小更改时调用该方法。由于将 添加Popup到 aLayout不会调用该open()方法,因此永远不会设置这些绑定。


查看完整回答
反对 回复 2023-07-11
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信