[kwlug-disc] Question Involving GTK 3 Programming in Python
Paul Nijjar
paul_nijjar at yahoo.ca
Sat May 1 14:49:09 EDT 2021
You prepend 'self.' in front of instance variables:
class ScrapAppWindow(Gtk.Window):
# ... snip ...
def __init__(self):
Gtk.Window.__init__(self, title="Scrap App")
self.set_border_width(10)
material_label = Gtk.Label(label="Please Select Material")
material_store = Gtk.ListStore(str)
material_store.append(["#1 Bright Copper"])
material_store.append(["#1 Copper"])
# ... snip ...
# This will make self.material_combo available in the class, I think
self.material_combo = Gtk.ComboBox.new_with_model(material_store)
self.material_combo.connect("changed", self.on_material_combo_changed)
renderer_text = Gtk.CellRendererText()
self.material_combo.pack_start(renderer_text, True)
self.material_combo.add_attribute(renderer_text, "text", 0)
plot_button = Gtk.Button.new_with_label("Plot Graph")
plot_button.connect("clicked", self.on_plot_graph_clicked)
vbox = Gtk.Box(orientation = Gtk.Orientation.VERTICAL, spacing=10)
vbox.pack_start(material_label, True, True, 0)
vbox.pack_start(self.material_combo, True, True, 0)
vbox.pack_start(plot_button, True, True, 0)
self.add(vbox)
self.show_all()
Then your on_plot_graph_clicked() function becomes something like:
def on_plot_graph_clicked(self, button):
������� print('"Plot Graph" Button was clicked.')
������� selected_material = None
������� tree_iter = self.material_combo.get_active_iter()
������� if tree_iter is not None:
����������� model = self.material_combo.get_model()
����������� selected_material = model[tree_iter][0]
������� if (selected_material is None) or (selected_material=="All
Materials"):
����������� dialog = Gtk.MessageDialog(
������������� transient_for=self,
��������������� flags=0,
��������������� message_type=Gtk.MessageType.INFO,
��������������� buttons=Gtk.ButtonsType.OK,
��������������� text="Please select a material.",
����������� )
����������� dialog.run()
��������� print("Plot Graph dialog closed.")
����������� dialog.destroy()
������� else:
����������� print("Calling plotgraph(%s)."� % selected_material)
����������� plotgraph(selected_material)
(I did not test this, and I could be very very wrong, but I believe this is how you set up classes in Python. See: https://www.digitalocean.com/community/tutorials/understanding-class-and-instance-variables-in-python-3
- Paul
> On 2021-04-29 3:41 p.m., Paul Nijjar via kwlug-disc wrote:
> >
> > You have a class ScrapAppWindow. My (possibly wrong) idea would be to
> > make material_combo a class variable, rather than a variable that is
> > local to the init() function. Then it will be accessible from your
> > other functions.
> >
> > - Paul
> >
> >
> Your suggestion is a good one Paul.� However I am at a total loss on how to
> implement your suggestion in Python.
>
> I did manage to get the Plot Graph button working by passing the
> material_combo variable to the on_plot_graph_clicked method. Sample code
> follows:
>
> def on_plot_graph_clicked(self, button, combo):
> ������� print('"Plot Graph" Button was clicked.')
>
> ������� selected_material = None
>
> ������� tree_iter = combo.get_active_iter()
> ������� if tree_iter is not None:
> ����������� model = combo.get_model()
> ����������� selected_material = model[tree_iter][0]
>
> ������� if (selected_material is None) or (selected_material=="All
> Materials"):
> ����������� dialog = Gtk.MessageDialog(
> ��������������� transient_for=self,
> ��������������� flags=0,
> ��������������� message_type=Gtk.MessageType.INFO,
> ��������������� buttons=Gtk.ButtonsType.OK,
> ��������������� text="Please select a material.",
> ����������� )
> ����������� dialog.run()
> ����������� print("Plot Graph dialog closed.")
> ����������� dialog.destroy()
> ������� else:
> ����������� print("Calling plotgraph(%s)."� % selected_material)
> ����������� plotgraph(selected_material)
>
> I calling the on_plot_graph_clicked method using this line.
>
> plot_button.connect("clicked", self.on_plot_graph_clicked, material_combo)
>
> My solution works, but becomes unwieldy very quickly with multiple combo
> boxes.
>
> John Driezen
> jdriezen at sympatico.ca
>
> On 2021-04-29 3:41 p.m., Paul Nijjar via kwlug-disc wrote:
> > You have a class ScrapAppWindow. My (possibly wrong) idea would be to
> > make material_combo a class variable, rather than a variable that is
> > local to the init() function. Then it will be accessible from your
> > other functions.
> >
> > - Paul
> >
> >
>
> _______________________________________________
> kwlug-disc mailing list
> kwlug-disc at kwlug.org
> https://kwlug.org/mailman/listinfo/kwlug-disc_kwlug.org
--
Events: https://feeds.off-topic.kwlug.org
Blog: http://pnijjar.freeshell.org
More information about the kwlug-disc
mailing list