Как запустить метод, который принимает переменные в качестве параметра? - PullRequest
0 голосов
/ 15 декабря 2018

Ниже у меня есть основной класс grid_gui и два подкласса, которые создают объекты графического интерфейса.Проблема с моим кодом состоит в том, что кнопки создания двух объектных интерфейсов запускают команду, которая должна принимать параметры.Однако я не уверен, как отформатировать мой параметр method_to_run в основном классе, чтобы я мог получить эти параметры.Каждый раз, когда я запускаю приведенный ниже код, он говорит мне, что в любом из подклассов мне нужно ввести параметр в метод, который я хочу запустить, в их init методах.Однако мне нужно, чтобы этот параметр вычислялся в функции основного класса init .Я попытался вставить переменные в методы подкласса init , но он никогда не работает, поскольку я не могу определить переменную, пока не будет вызван основной класс.Я везде просматривал StackOverflow и другие сайты, но ни один из них не дал мне полезного ответа.Любая обратная связь будет принята с благодарностью.

class grid_gui(Frame):
        def __init__(self, rownumber, columnnumber, color_pattern, button_names, method_to_run):
        self.rownumber = rownumber 
        self.columnnumber = columnnumber 
        self.color_pattern = color_pattern 
        self.button_names = button_names 
        self.buttons = [] 
        ### --- Window --- ###
            # Get Screen Dimensions #
        screen_width = root.winfo_screenwidth()
        screen_height = root.winfo_screenheight()
            # Get GUI Dimensions #
        width = screen_width
        height = screen_height/2
            # Center the GUI #
        posx = (screen_width/2) - (width/2)
        posy = 0
            # Place the GUI #
        root.geometry('%dx%d+%d+%d' % (width, height, posx, posy))
        root.resizable(False, False)
            # Configure the rows and columns #
                # Rows #
        for y in range(self.rownumber):
            root.rowconfigure(y, weight=1)
                # Columns #
        for x in range(self.columnnumber):
            root.columnconfigure(x, weight=1)

        ### --- Buttons --- ###
        for j in range(len(self.columnnumber)):
            self.buttons.append([])
            for i in range(self.rownumber):
                index = len(self.buttons)
                self.buttons[j].append(Button(root, text=self.button_names[index], bg=self.color_pattern[index%3], fg='white', command=lambda: method_to_run(index + 1)))
                self.buttons[j][i].grid(row=i, column=j, sticky=N+E+S+W)

class choice_2_gui(grid_gui):
    def __init__(self): # Create the choice 2 GUI
        grid_gui.__init__(3, 6, ['red', 'green', 'blue'], ['AREA OF PARK', 'POPULATION YEAR', 'SURVEY DATE', 'SPECIES NAME', 'UNKNOWN AGE AND SEX COUNT', 'ADULT MALE COUNT', 'ADULT FEMALE COUNT', 'ADULT UNKNOWN COUNT', 'YEARLING COUNT', 'CALF COUNT', 'SURVEY TOTAL', 'SIGHTABILITY CORRECTION FACTOR', 'ADDITIONAL CAPTIVE COUNT', 'ANIMALS REMOVED', 'FALL POPULATION ESTIMATE', 'SURVEY COMMENT', 'ESTIMATE METHOD', 'SAVE'], choice_2_gui.choice_2_input_choice_input())

    @staticmethod
    def choice_2_input_choice_input(var):
        global choice_2_choice
        choice_2_choice = var
        root.destroy()

class choice_3_gui(grid_gui):
    def __init__(self): # Create the choice 3 GUI #
        grid_gui.__init__(3, 5, ['red', 'green', 'blue'], ['SURVEY DATE', 'UNKNOWN AGE AND SEX COUNT', 'ADULT MALE COUNT', 'ADULT FEMALE COUNT', 'ADULT UNKNOWN COUNT', 'YEARLING COUNT', 'CALF COUNT', 'SURVEY TOTAL', 'SIGHTABILITY CORRECTION FACTOR', 'ADDITIONAL CAPTIVE COUNT', 'ANIMALS REMOVED PRIOR TO SURVEY', 'FALL POPULATION ESTIMATE', 'SURVEY COMMENT', 'ESTIMATE METHOD', 'EXIT'], choice_3_gui.option_3_index_choice())

    @staticmethod
    def option_3_index_choice(var):
        global option_3_choice
        option_3_choice = var
        root.destroy()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...