несколько разметок / переходов разметки в плазмоиде питона - PullRequest
1 голос
/ 13 ноября 2010

Я делаю маленький плазмоид Python , который имеет дело с удаленными ресурсами. Вот код: 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 () , он добавит элементы в текущий макет ... так что оба будут отображаться в одном месте.

Как мне это сделать, пожалуйста?

1 Ответ

1 голос
/ 16 ноября 2010

Вы можете использовать Plasma.TabBar со скрытыми вкладками и переключаться между ними, как упоминалось в IRC. Подключите сигналы clicked к слотам, которые переключаются между вкладками, и все должно быть в порядке.

Кроме того, обратите внимание на стиль: вы должны использовать новый API сигнал / слот , когда это возможно:

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

должно стать

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