【问题标题】:multiple layouts/layout transitions in a python plasmoidpython plasmoid中的多个布局/布局转换
【发布时间】:2010-11-13 17:27:12
【问题描述】:

我正在做一个处理远程资源的 little python plasmoid。 这是代码:glpoid

它提供了一个工单视图(默认),一个允许用户填写和发送新工单的视图,以及最后一个到的视图查看门票详情...

我的问题是,当我传递到另一个视图(或使其消失)时,我不知道如何“关闭”当前布局。

对于每个布局,我定义了添加到布局定义中的项目,最后我显示新布局:

最初,我使用 self.view_tickets_ui() 显示默认视图。 每个布局都在 name_ui() 方法中定义,每个方法都重新定义布局并将其传递给小程序。

要恢复它的定义如下:

class GLPIApplet(plasmascript.Applet):
    def __init__(self,parent,args=None):
        plasmascript.Applet.__init__(self,parent)

    def init(self):
        self.setHasConfigurationInterface(False)
        self.setAspectRatioMode(Plasma.Square)
        self.resize(400,650)
        # new ticket button
        self.new = Plasma.PushButton()
        self.new.setText('Nouveau Ticket')
        self.connect(self.new, SIGNAL('clicked()'), self.new_ticket_ui)
        # refresh button
        self.refresh = Plasma.PushButton()
        self.refresh.setText('Rafraichir')
        self.connect(self.refresh, SIGNAL('clicked()'), self.view_tickets_ui)       
        # initialize
        self.view_tickets_ui()

    def view_tickets_ui(self, message=None):
        # layout of ticket view
        self.layout = QGraphicsLinearLayout(Qt.Vertical)
        self.layout.itemSpacing(3)           
        self.layout.addItem(self.new)
        self.view_tickets()
        self.layout.addItem(self.refresh)
        self.applet.setLayout(self.layout)

    def new_ticket_ui(self, message=None):
        # layout of a new ticket
        self.layout = QGraphicsLinearLayout(Qt.Vertical)
        self.layout.itemSpacing(3)
        message_label = Plasma.Label()
        message_label.setText('the message:')            
        self.layout.addItem(message_label)
        self.applet.setLayout(self.layout)

这里init只是定义了一些按钮,然后调用view_tickets_ui()来放置一些item并显示布局。 如果我之后调用 new_ticket_ui(),它会将元素添加到当前布局中......所以两者都显示在同一个地方。

请问我该如何处理?

【问题讨论】:

    标签: python kde-plasma plasmoid


    【解决方案1】:

    您可以使用带有隐藏选项卡的Plasma.TabBar 并在它们之间切换,如 IRC 所述。将clicked 信号连接到在选项卡之间切换的插槽,一切都应该没问题。

    另外,关于风格的说明:您应该尽可能使用new signal/slot API

    self.connect(self.refresh, SIGNAL('clicked()'), self.view_tickets_ui)
    

    应该变成

    self.refresh.clicked.connect(self.view_tickets_ui).
    

    【讨论】:

    • 感谢 Einar 的这些建议,我正在修改我的代码以查看结果,然后告诉你进展如何。
    猜你喜欢
    • 2013-11-19
    • 1970-01-01
    • 2019-12-12
    • 2017-10-01
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    相关资源
    最近更新 更多