monchovarela
4/20/2019 - 2:21 AM

Test pygubu app with 3 sections and menu

Test pygubu app with 3 sections and menu

<?xml version='1.0' encoding='utf-8'?>
<interface>
  <object class="ttk.Frame" id="maincontent">
    <property name="height">200</property>
    <property name="width">200</property>
    <layout>
      <property name="column">0</property>
      <property name="propagate">True</property>
      <property name="row">0</property>
    </layout>
    <child>
      <object class="ttk.Label" id="Label_1">
        <property name="text" translatable="yes">Label_1</property>
        <layout>
          <property name="column">0</property>
          <property name="pady">5</property>
          <property name="propagate">True</property>
          <property name="row">0</property>
          <property name="sticky">nw</property>
        </layout>
      </object>
    </child>
    <child>
      <object class="ttk.Entry" id="Entry_1">
        <property name="text" translatable="yes">Entry_1</property>
        <layout>
          <property name="column">0</property>
          <property name="ipady">5</property>
          <property name="propagate">True</property>
          <property name="row">1</property>
        </layout>
      </object>
    </child>
    <child>
      <object class="ttk.Label" id="Label_2">
        <property name="text" translatable="yes">Label_2</property>
        <layout>
          <property name="column">1</property>
          <property name="pady">5</property>
          <property name="propagate">True</property>
          <property name="row">0</property>
          <property name="sticky">nw</property>
        </layout>
      </object>
    </child>
    <child>
      <object class="ttk.Entry" id="Entry_2">
        <property name="text" translatable="yes">Entry_2</property>
        <layout>
          <property name="column">1</property>
          <property name="ipady">5</property>
          <property name="propagate">True</property>
          <property name="row">1</property>
        </layout>
      </object>
    </child>
    <child>
      <object class="ttk.Label" id="Label_3">
        <property name="text" translatable="yes">Label_3</property>
        <layout>
          <property name="column">0</property>
          <property name="pady">5</property>
          <property name="propagate">True</property>
          <property name="row">2</property>
          <property name="sticky">nw</property>
        </layout>
      </object>
    </child>
    <child>
      <object class="ttk.Entry" id="Entry_3">
        <property name="text" translatable="yes">Entry_3</property>
        <layout>
          <property name="column">0</property>
          <property name="ipady">5</property>
          <property name="propagate">True</property>
          <property name="row">3</property>
        </layout>
      </object>
    </child>
    <child>
      <object class="ttk.Label" id="Label_4">
        <property name="text" translatable="yes">Label_4</property>
        <layout>
          <property name="column">1</property>
          <property name="pady">5</property>
          <property name="propagate">True</property>
          <property name="row">2</property>
          <property name="sticky">nw</property>
        </layout>
      </object>
    </child>
    <child>
      <object class="ttk.Entry" id="Entry_4">
        <property name="text" translatable="yes">Entry_4</property>
        <layout>
          <property name="column">1</property>
          <property name="ipady">5</property>
          <property name="propagate">True</property>
          <property name="row">3</property>
        </layout>
      </object>
    </child>
    <child>
      <object class="ttk.Button" id="Button_2">
        <property name="command">on_btn_save</property>
        <property name="text" translatable="yes">Save</property>
        <layout>
          <property name="column">0</property>
          <property name="ipadx">5</property>
          <property name="ipady">5</property>
          <property name="padx">5</property>
          <property name="pady">5</property>
          <property name="propagate">True</property>
          <property name="row">8</property>
          <property name="sticky">nw</property>
        </layout>
      </object>
    </child>
    <child>
      <object class="ttk.Button" id="Button_3">
        <property name="command">on_btn_back</property>
        <property name="text" translatable="yes">Cancel</property>
        <layout>
          <property name="column">0</property>
          <property name="columnspan">15</property>
          <property name="ipadx">5</property>
          <property name="ipady">5</property>
          <property name="padx">2</property>
          <property name="pady">5</property>
          <property name="propagate">True</property>
          <property name="row">8</property>
          <property name="sticky">n</property>
        </layout>
      </object>
    </child>
  </object>
</interface>
import os
import tkinter as tk
from tkinter import messagebox

import pygubu

root = tk.Tk()

class Application(pygubu.TkApplication):

    def _create_ui(self):

        #1: Create a builder
        self.builder = builder = pygubu.Builder()

        #2: Load an ui file
        builder.add_from_file(self.ui_file("menu.ui"))

        #3: Create the widget using self.master as parent
        self.mainwindow = builder.get_object('mainwindow',self.master)

        # Set main menu
        self.mainmenu = menu = builder.get_object('mainmenu', self.master)
        self.set_menu(menu)

        self.maincontent = builder.get_object('maincontent',self.master)
        self.maincontent.pack()


        # Configure callbacks
        builder.connect_callbacks(self)

    def ui_file(self,ui):
        return os.path.join(os.path.dirname(__file__),ui)

    def on_mfile_item_clicked(self, itemid):
        if itemid == 'mfile_open':
            messagebox.showinfo('File', 'You clicked Open menuitem')

        if itemid == 'mfile_quit':
            messagebox.showinfo('File', 'You clicked Quit menuitem. Byby')
            self.quit();


    def on_about_clicked(self):
        messagebox.showinfo('About', 'You clicked About menuitem')



    def on_btn_clicked(self):
        self.maincontent.pack_forget()
        self.builder = builder = pygubu.Builder()
        builder.add_from_file(self.ui_file("another.ui"))
        self.about = builder.get_object('maincontent',self.mainwindow)
        self.about.pack()
        builder.connect_callbacks(self)

    def on_btn_save(self):
        self.about.pack_forget()
        self.builder = builder = pygubu.Builder()
        builder.add_from_file(self.ui_file("settings.ui"))
        self.about = builder.get_object('maincontent',self.mainwindow)
        self.about.pack()
        # Configure callbacks
        builder.connect_callbacks(self)     

    def on_btn_back(self):
        self.about.pack_forget()
        self.builder = builder = pygubu.Builder()
        builder.add_from_file(self.ui_file("menu.ui"))
        self.maincontent = builder.get_object('maincontent',self.mainwindow)
        self.maincontent.pack()
        # Configure callbacks
        builder.connect_callbacks(self)


    def run(self):
        self.mainwindow.mainloop()



if __name__ == '__main__':
    app = Application(root)
    app.run()
<?xml version='1.0' encoding='utf-8'?>
<interface>
  <object class="tk.Menu" id="mainmenu">
    <property name="tearoff">0</property>
    <child>
      <object class="tk.Menuitem.Submenu" id="mfile">
        <property name="label" translatable="yes">File</property>
        <property name="tearoff">0</property>
        <child>
          <object class="tk.Menuitem.Command" id="mfile_open">
            <property name="command">on_mfile_item_clicked</property>
            <property name="command_id_arg">True</property>
            <property name="label" translatable="yes">Open</property>
          </object>
        </child>
        <child>
          <object class="tk.Menuitem.Separator" id="separator1" />
        </child>
        <child>
          <object class="tk.Menuitem.Command" id="mfile_quit">
            <property name="command">on_mfile_item_clicked</property>
            <property name="command_id_arg">True</property>
            <property name="label" translatable="yes">Quit</property>
          </object>
        </child>
      </object>
    </child>
    <child>
      <object class="tk.Menuitem.Submenu" id="mhelp">
        <property name="label" translatable="yes">Help</property>
        <property name="tearoff">0</property>
        <child>
          <object class="tk.Menuitem.Command" id="mhelp_about">
            <property name="command">on_about_clicked</property>
            <property name="command_id_arg">False</property>
            <property name="label" translatable="yes">About</property>
          </object>
        </child>
      </object>
    </child>
  </object>
  <object class="ttk.Frame" id="mainwindow">
    <property name="height">300</property>
    <property name="width">400</property>
    <layout>
      <property name="column">0</property>
      <property name="propagate">True</property>
      <property name="row">0</property>
      <property name="sticky">nesw</property>
    </layout>
    <child>
      <object class="ttk.Frame" id="maincontent">
        <property name="height">300</property>
        <property name="width">400</property>
        <layout>
          <property name="column">0</property>
          <property name="propagate">True</property>
          <property name="row">0</property>
        </layout>
        <child>
          <object class="ttk.Label" id="lb_1">
            <property name="font">{Consolas} 12 {bold}</property>
            <property name="justify">center</property>
            <property name="text" translatable="yes">Welcome to page one</property>
            <layout>
              <property name="column">0</property>
              <property name="ipadx">5</property>
              <property name="ipady">5</property>
              <property name="padx">5</property>
              <property name="pady">5</property>
              <property name="propagate">False</property>
              <property name="row">0</property>
              <property name="sticky">nw</property>
            </layout>
          </object>
        </child>
        <child>
          <object class="ttk.Button" id="btn_1">
            <property name="command">on_btn_clicked</property>
            <property name="cursor">arrow</property>
            <property name="default">normal</property>
            <property name="text" translatable="yes">Page 2</property>
            <layout>
              <property name="column">0</property>
              <property name="ipadx">5</property>
              <property name="ipady">5</property>
              <property name="padx">5</property>
              <property name="pady">5</property>
              <property name="propagate">False</property>
              <property name="row">1</property>
            </layout>
          </object>
        </child>
      </object>
    </child>
  </object>
</interface>
<?xml version='1.0' encoding='utf-8'?>
<interface>
  <object class="ttk.Frame" id="maincontent">
    <property name="height">200</property>
    <property name="width">200</property>
    <layout>
      <property name="column">0</property>
      <property name="propagate">True</property>
      <property name="row">0</property>
    </layout>
    <child>
      <object class="tk.Text" id="txt_1">
        <property name="height">10</property>
        <property name="text" translatable="yes">this is a new section</property>
        <property name="width">50</property>
        <layout>
          <property name="column">0</property>
          <property name="propagate">True</property>
          <property name="row">0</property>
        </layout>
      </object>
    </child>
    <child>
      <object class="ttk.Button" id="btn_2">
        <property name="command">on_btn_back</property>
        <property name="text" translatable="yes">Back to home</property>
        <layout>
          <property name="column">0</property>
          <property name="ipadx">5</property>
          <property name="ipady">5</property>
          <property name="padx">5</property>
          <property name="pady">5</property>
          <property name="propagate">True</property>
          <property name="row">1</property>
          <property name="sticky">nw</property>
        </layout>
      </object>
    </child>
  </object>
</interface>