problem.py
unknown
python
a year ago
3.7 kB
9
Indexable
#!/usr/bin/python3 import os import gi gi.require_version("Gtk", "3.0") from gi.repository import Gtk, GLib IS_ROOT = (os.geteuid() == 0) NOT_ROOT_NOTICE = "You cannot change the configuration because you are not root" class ApplyButtonsWidget(Gtk.VBox): def __init__(self): super().__init__() self.error_label = Gtk.Label() self.add(self.error_label) self.read_only_checkbox = Gtk.CheckButton(label="(Re-)start in read-only mode") self.add(self.read_only_checkbox) hbox = Gtk.HBox() self.add(hbox) self.apply_button = Gtk.Button(label="Apply") hbox.add(self.apply_button) self.apply_with_restart_button = Gtk.Button(label="Apply with (re-)start") hbox.add(self.apply_with_restart_button) def enable(self): self.error_label.hide() self.read_only_checkbox.set_sensitive(True) self.apply_button.set_sensitive(True) self.apply_with_restart_button.set_sensitive(True) def disable(self, reason): self.error_label.show() self.error_label.set_text(reason) self.read_only_checkbox.set_sensitive(False) self.apply_button.set_sensitive(False) self.apply_with_restart_button.set_sensitive(False) class TemperatureSourcesWidget(Gtk.Frame): def __init__(self): super().__init__() self.stack = Gtk.Stack() self.add(self.stack) # Error Widget ======================================================== self.error_widget = Gtk.VBox() self.error_label = Gtk.Label() self.error_widget.add(self.error_label) button_layout = Gtk.HBox() self.retry_button = Gtk.Button(label="Retry") self.retry_button.connect("clicked", self.setup_ui) button_layout.add(self.retry_button) self.error_widget.add(button_layout) self.stack.add_titled(self.error_widget, "error_layout", "Error") # Main Widget ========================================================= self.main_widget = Gtk.VBox() scroll_area = Gtk.ScrolledWindow() self.available_temperature_sources = Gtk.ListBox() self.available_temperature_sources.set_selection_mode(Gtk.SelectionMode.SINGLE) scroll_area.add(self.available_temperature_sources) self.main_widget.add(scroll_area) scroll_area = Gtk.ScrolledWindow() self.temperature_sources_widget = Gtk.VBox() scroll_area.add(self.temperature_sources_widget) self.main_widget.add(scroll_area) self.apply_buttons_widget = ApplyButtonsWidget() self.main_widget.add(self.apply_buttons_widget) self.stack.add_titled(self.main_widget, "main_widget", "Main") self.setup_ui() # XXX: This "fixes" the undesired behaviour # self.setup_ui() def setup_ui(self, *_): if not IS_ROOT: self.apply_buttons_widget.disable(NOT_ROOT_NOTICE) else: self.apply_buttons_widget.enable() for child in self.available_temperature_sources.get_children(): self.available_temperature_sources.remove(child) self.stack.set_visible_child(self.main_widget) self.stack.show_all() print('changed stack to main_widget') class MainWindow(Gtk.Window): def __init__(self): super().__init__(title="NBFC Client") self.set_default_size(400, 400) temperature_sources_widget = TemperatureSourcesWidget() self.add(temperature_sources_widget) if __name__ == '__main__': window = MainWindow() window.connect("destroy", Gtk.main_quit) window.show_all() Gtk.main()
Editor is loading...
Leave a Comment