Use f-strings Avoid unnecessary casts to str()bool()int() Ensure file closure Merge nested ifs Simplify for-assigns-appends with comprehensions and internal functions Avoid shadowing internal function names Initialize variables Return value directly instead of assign then return Make some methods static
50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
import gi
|
|
import logging
|
|
|
|
gi.require_version("Gtk", "3.0")
|
|
from gi.repository import Gtk
|
|
from ks_includes.screen_panel import ScreenPanel
|
|
|
|
logger = logging.getLogger("KlipperScreen.PrinterSelect")
|
|
|
|
|
|
def create_panel(*args):
|
|
return PrinterSelect(*args)
|
|
|
|
|
|
class PrinterSelect(ScreenPanel):
|
|
def __init__(self, screen, title, back=True, action_bar=True, printer_name=True):
|
|
super().__init__(screen, title, False, False, False)
|
|
|
|
def initialize(self, panel_name):
|
|
|
|
printers = self._config.get_printers()
|
|
|
|
grid = self._gtk.HomogeneousGrid()
|
|
scroll = self._gtk.ScrolledWindow()
|
|
scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
|
|
scroll.add(grid)
|
|
self.content.add(scroll)
|
|
|
|
length = len(printers)
|
|
if length == 4:
|
|
# Arrange 2 x 2
|
|
columns = 2
|
|
elif 4 < length <= 6:
|
|
# Arrange 3 x 2
|
|
columns = 3
|
|
else:
|
|
columns = 4
|
|
|
|
for i, printer in enumerate(printers):
|
|
name = list(printer)[0]
|
|
self.labels[name] = self._gtk.ButtonImage("extruder", name, f"color{1 + i % 4}")
|
|
self.labels[name].connect("clicked", self._screen.connect_printer_widget, name)
|
|
if self._screen.vertical_mode:
|
|
row = i % columns
|
|
col = int(i / columns)
|
|
else:
|
|
col = i % columns
|
|
row = int(i / columns)
|
|
grid.attach(self.labels[name], col, row, 1, 1)
|