我正在做一个处理远程资源的小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()放置一些项目并显示布局。 如果我之后调用 new_ticket_ui(),它会将元素添加到当前布局...所以两者都显示在同一个地方。
我该怎么办?
答案 0 :(得分: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).