1

私はリモート リソースを扱う小さな python プラズモイドをやっています。コードは次のとおりです。

チケットのビュー(デフォルトのもの)、ユーザーが新しいチケットを入力して送信できるビュー、およびチケットの詳細を表示する最後のビューを提供します...

私の問題は、別のビューに渡す (または非表示にする) ときに現在のレイアウトを「閉じる」方法がわからないことです。

レイアウトごとに、レイアウト定義に追加するアイテムを定義し、最後に新しいレイアウトを表示します。

最初に、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()を呼び出すと、現在のレイアウトに要素が追加されるため、両方が同じ場所に表示されます。

どうすればそれを管理できますか??

4

1 に答える 1

1

IRCで説明されているように、非表示のタブでを使用してPlasma.TabBar、それらを切り替えることができます。clickedタブを切り替えるスロットに信号を接続すると、すべてが正常になります。

また、スタイルに関する注意:可能な限り新しいシグナル/スロットAPIを使用する必要があります。

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

になる必要があります

self.refresh.clicked.connect(self.view_tickets_ui).
于 2010-11-15T21:22:26.767 に答える