簡體   English   中英

python中的主函數調用失敗

[英]main function call fails in 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()

你的代碼中的 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM