problem.py
unknown
python
a year ago
3.7 kB
18
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