ошибка конфигурации в Qtile (менеджер окон Tiling)

Я пытаюсь настроить qtile, просмотрев эталонную конфигурацию из gitlab DistroTube (Youtube): https://gitlab.com/dwt1/dotfiles/-/blob/master/.config/qtile/config.py

я получаю сообщение об ошибке при добавлении этого

##### BAR #####

def init_widgets_screen():
widgets_screen = init_widgets_list()
return widgets_screen

def init_screens() :
return [Screen(top=bar.Bar(widgets=init_widgets_screen(), opacity=0.95, size=20))

if __name__ in ["config", "__main__"]:
screens = init_screens()
widgets_list = init_widgets_list()
widget_screen = init_widgets_screen()

он использует 3 монитора, и я пытаюсь установить это на свой ноутбук, так что только один экран

(нужная часть ссылки начинается со строки 555)


person apoorv569    schedule 20.05.2020    source источник


Ответы (1)


Похоже, это может быть просто проблема с пробелами. Вам нужно сделать отступ для каждого тела функции. Также есть дополнительный пробел перед двоеточием в определении init_screens (хотя я думаю, что на самом деле это допустимый питон).

В случае, если отсутствие отступа было просто из-за копирования и вставки в переполнение стека, было бы полезно, если бы вы могли запустить qtile в терминале и скопировать сюда вывод/ошибку.

##### BAR #####

def init_widgets_screen():
    widgets_screen = init_widgets_list()
    return widgets_screen

def init_screens():
    return [Screen(top=bar.Bar(widgets=init_widgets_screen(), opacity=0.95, size=20))

if __name__ in ["config", "__main__"]:
    screens = init_screens()
    widgets_list = init_widgets_list()
    widget_screen = init_widgets_screen()

Изменить после уточнения

Ваш конфигурационный файл определяет функцию init_widgets_list между строками 114 и 317, и она выглядит примерно так:

def init_widgets_list():
  widgets_list = [
    [
      widget.Sep(
        linewidth = 0,
        padding = 6,
        foreground = colors[2],
        background = colors[0]
      ),
      # ...
      widget.Systray(
        background=colors[0],
        padding = 5
      ),
    ],
  ]

  return widgets_list

Вы заключаете список виджетов в другой список, а qtile ожидает плоский список виджетов. Чтобы исправить это, вам нужно удалить один набор квадратных скобок.

def init_widgets_list():
  widgets_list = [
    widget.Sep(
      linewidth = 0,
      padding = 6,
      foreground = colors[2],
      background = colors[0]
    ),
    # ...
    widget.Systray(
      background=colors[0],
      padding = 5
    ),
  ]

  return widgets_list
person Josh Mills    schedule 20.05.2020
comment
я попытался запустить qtile через терминал и получил (imgur.com/gm8zikZ), поэтому я добавил строку из конфигурации DistroTube - prompt = {0}@{1}: .format(os.environ[USER], socket.gethostname()) я снова запустил qtile в терминале и получил это - (imgur.com/3iHy6DA) - person apoorv569; 21.05.2020
comment
Упомянутая вами ошибка исходит из здесь. Похоже, ваша функция init_widgets_list может возвращать список, содержащий другой список, когда она ожидает Widgets. - person Josh Mills; 21.05.2020
comment
вот моя конфигурация, если вы можете мне помочь - pastebin.com/m3FYZ6N2 - person apoorv569; 21.05.2020
comment
Смотрите обновленный ответ - также здесь исправленная версия конфигурации, которую вы отправили pastebin.com/rRRWv290 - person Josh Mills; 21.05.2020
comment
ааа, я, должно быть, пропустил это, потому что я скопировал его из конфигурации DistroTube. Я попробую и вернусь к вам. - person apoorv569; 21.05.2020