вызов главной функции не выполняется в python

Я написал следующий код, который создает макет и отображает текст в макете. Затем макет отображается на экране консоли с использованием модуля необработанного отображения из библиотеки urwid. Однако выполнение кода не выполняется, поскольку он не находит функцию main, которую я написал отдельно в классе.

Код ошибки при запуске:

Traceback (most recent call last): File "./yamlUrwidUIPhase5.py", line 89, in <module> main() File "./yamlUrwidUIPhase5.py", line 83, in main FormDisplay().main() AttributeError: 'NoneType' object has no attribute 'main' 

Код :

 import sys sys.path.append('./lib') import os from pprint import pprint import random import urwid def formLayout(): text1 = urwid.Text("Urwid 3DS Application program - F8 exits.") text2 = urwid.Text("One mission accomplished") textH = urwid.Text("topmost Pile text") cols = urwid.Columns([text1,text2]) pile = urwid.Pile([textH,cols]) fill = urwid.Filler(pile) textT = urwid.Text("Display") textSH = urwid.Text("Pile text in Frame") textF = urwid.Text("Good progress !") frame = urwid.Frame(fill,header=urwid.Pile([textT,textSH]),footer=textF) dim = ui.get_cols_rows() ui.draw_screen(dim, frame.render(dim, True)) def RandomColor(): '''Pick a random color for the main menu text''' listOfColors = ['dark red', 'dark green', 'brown', 'dark blue', 'dark magenta', 'dark cyan', 'light gray', 'dark gray', 'light red', 'light green', 'yellow', 'light blue', 'light magenta', 'light cyan', 'default'] color = listOfColors[random.randint(0, 14)] return color def FormDisplay(): import urwid.raw_display ui = urwid.raw_display.Screen() palette = ui.register_palette([ ('Field', 'dark green, bold', 'black'), # information fields, Search: etc. ('Info', 'dark green', 'black'), # information in fields ('Bg', 'black', 'black'), # screen background ('InfoFooterText', 'white', 'dark blue'), # footer text ('InfoFooterHotkey', 'dark cyan, bold', 'dark blue'), # hotkeys in footer text ('InfoFooter', 'black', 'dark blue'), # footer background ('InfoHeaderText', 'white, bold', 'dark blue'), # header text ('InfoHeader', 'black', 'dark blue'), # header background ('BigText', RandomColor(), 'black'), # main menu banner text ('GeneralInfo', 'brown', 'black'), # main menu text ('LastModifiedField', 'dark cyan, bold', 'black'), # Last modified: ('LastModifiedDate', 'dark cyan', 'black'), # info in Last modified: ('PopupMessageText', 'black', 'dark cyan'), # popup message text ('PopupMessageBg', 'black', 'dark cyan'), # popup message background ('SearchBoxHeaderText', 'light gray, bold', 'dark cyan'), # field names in the search box ('SearchBoxHeaderBg', 'black', 'dark cyan'), # field name background in the search box ('OnFocusBg', 'white', 'dark magenta') # background when a widget is focused ]) urwid.set_encoding('utf8') def main(self): #self.view = ui.run_wrapper(formLayout) self.view = formLayout() ui.start() self.loop = urwid.MainLoop(self.view, self.palette, unhandled_input=self.unhandled_input) self.loop.run() def unhandled_input(self, key): if key == 'f8': quit() return def main(): global ui FormDisplay().main() ######################################## ##### MAIN ENTRY POINT ######################################## if __name__ == '__main__': main() 

2 Solutions collect form web for “вызов главной функции не выполняется в python”

FormDisplay в вашем коде не является классом, а функцией, что-то вроде этого было бы более уместным. Кстати, я бы рекомендовал прочитать некоторые из этого документа http://docs.python.org/2/tutorial/classes.html

 import urwid.raw_display class FormDisplay(object): def __init__(self): self.ui = urwid.raw_display.Screen() self.palette = ui.register_palette([ ('Field', 'dark green, bold', 'black'), # information fields, Search: etc. ('Info', 'dark green', 'black'), # information in fields ('Bg', 'black', 'black'), # screen background ('InfoFooterText', 'white', 'dark blue'), # footer text ('InfoFooterHotkey', 'dark cyan, bold', 'dark blue'), # hotkeys in footer text ('InfoFooter', 'black', 'dark blue'), # footer background ('InfoHeaderText', 'white, bold', 'dark blue'), # header text ('InfoHeader', 'black', 'dark blue'), # header background ('BigText', RandomColor(), 'black'), # main menu banner text ('GeneralInfo', 'brown', 'black'), # main menu text ('LastModifiedField', 'dark cyan, bold', 'black'), # Last modified: ('LastModifiedDate', 'dark cyan', 'black'), # info in Last modified: ('PopupMessageText', 'black', 'dark cyan'), # popup message text ('PopupMessageBg', 'black', 'dark cyan'), # popup message background ('SearchBoxHeaderText', 'light gray, bold', 'dark cyan'), # field names in the search box ('SearchBoxHeaderBg', 'black', 'dark cyan'), # field name background in the search box ('OnFocusBg', 'white', 'dark magenta') # background when a widget is focused ]) def main(self): #self.view = ui.run_wrapper(formLayout) self.view = formLayout() self.ui.start() self.loop = urwid.MainLoop(self.view, self.palette, unhandled_input=self.unhandled_input) self.loop.run() if __name__ = "__main__": form = FormDisplay() form.main() 

Я не вижу отдельного класса. Но согласно вашему коду, FormDisplay – это функция, которая ничего не возвращает. FormDisplay().main() None.main() равно None.main() .

 
Interesting Posts for Van-Lav

Добавить текст в файл в Python

Python – подзаголовки, объединяющиеся с общей осью x, различными y-масштабированиями и фигурами

фабрика мальчиков фабрики django с отношениями OneToOne и связанной с ними областью

Обнаруживать, когда изменяется размер столбца в gtk.treeview

Python: слишком много индексов

Получение статуса free / busy из Microsoft Outlook с помощью python

Каков стандартный формат docstring Python?

Ошибка в разборе, обновление нескольких столбцов в 1 строке

Вид дерева Qt с Pyside

32-битная математика с плавающей запятой в 64-битном Python

Как сохранить секрет ключа разработчика в сценарии Python, который размещен на GitHub

Pandas to_dict изменяет тип индекса с outtype = 'records'

Извлечь данные из JSON API с помощью Python

BeautifulSoup – Получить текст в теге только в том случае, если определенная строка найдена

Как я могу сортировать в разделах, определенных одним столбцом, но оставить разделы, где они есть?

Python - лучший язык программирования в мире.