I continue to translate the code to Python 3 of this project, a sapper with Python 2.6, and as a result I get an error in line 92 gui.py

  super (GUI, self) .grid () TypeError: super (type, obj): obj must be an instance or subtype of type 

Code gui.py:

# coding=utf-8 import tkinter import tkinter.messagebox from constants import * class GUI( tkinter.Tk): is_grid = False _time_begin = 1 """ начало с 1й секунды """ _timer_id = False """ ID интервала таймера """ def __init__(self): tkinter.Tk.__init__(self) self.title(WINDOW_TITLE) self.geometry("%sx%s" % (WINDOW_WIDTH, WINDOW_HEIGHT)) self.tk_frame_toolbar = tkinter.Frame(self, width=WINDOW_WIDTH, height=WINDOW_TOOLBAR_HEIGHT, background="grey", relief=tkinter.GROOVE, border=2) self.tk_frame_main = tkinter.Frame(self, width=WINDOW_WIDTH, height=(WINDOW_HEIGHT - WINDOW_TOOLBAR_HEIGHT), background=WINDOW_MAIN_FRAME_COLOR_BACKGROUND, relief=tkinter.GROOVE, border=2) self.tk_label_timer = tkinter.Label(self.tk_frame_toolbar, text="0000") self.tk_label_timer.grid(row=0, column=0, sticky=tkinter.NSEW) self.tk_label_button_new = tkinter.Button(self.tk_frame_toolbar, text="NEW") self.tk_label_button_new.grid(row=0, column=1, sticky=tkinter.NSEW) self.tk_label_counter = tkinter.Label(self.tk_frame_toolbar, text="00/00") self.tk_label_counter.grid(row=0, column=2, sticky=tkinter.NSEW) def show_all_count_mine(self): """ Показываем общее число мин на панели """ self.tk_label_counter['text'] = "00/%2d" % MINE_COUNT def show_selected_count_mine(self, selected_mine): """ Показываем расставленное число мин на панели :type selected_mine: int """ self.tk_label_counter['text'] = "%2d/%2d" % (selected_mine, MINE_COUNT) def timer_start(self): """ Включает таймер игры """ if not self._timer_id and self._time_begin == 1: self.timer() def timer_stop(self): """ Выключает таймер игры """ if self._timer_id: self.tk_label_timer.after_cancel(self._timer_id) self._timer_id = False def timer(self): self.tk_label_timer['text'] = "%0004d" % self._time_begin self._time_begin += 1 self._timer_id = self.tk_label_timer.after(1000, self.timer) def game_over(self): """ Показываем окно с поражением :return: :rtype: bool """ self.timer_stop() tkMessageBox.showerror(GAME_OVER_WINDOW_TITLE, GAME_OVER_MESSAGE) return False def game_winner(self): """ Показываем окно с победой :return: :rtype: bool """ self.timer_stop() tkMessageBox.showinfo(WINNER_WINDOW_TITLE, WINNER_MESSAGE) return False def grid(self): super(GUI, self).grid() # тут ошибка... #super(self).__init__(master=parent, text='inner').grid() self.tk_frame_toolbar.grid(row=0, column=0) self.tk_frame_toolbar.rowconfigure('all', minsize=WINDOW_TOOLBAR_HEIGHT) width_label_toolbar = (float(WINDOW_WIDTH - WINDOW_TOOLBAR_HEIGHT)) / 2.0 self.tk_frame_toolbar.columnconfigure(0, minsize=width_label_toolbar - 5) self.tk_frame_toolbar.columnconfigure(1, minsize=WINDOW_TOOLBAR_HEIGHT) self.tk_frame_toolbar.columnconfigure(2, minsize=width_label_toolbar - 5) self.tk_frame_main.grid(row=1, column=0) self.is_grid = True def show(self): if not self.is_grid: self.grid() self.mainloop() 

It seems like instead of a GUI there should be a type, but what type? class does not roll? An object? but how do you know its type? PyDoc did not save me.

  • one
    I can not repeat the problem, I have your code running. - Sergey Gornostaev pm
  • Just try super().grid() - Sergey Gornostaev pm
  • I'm not sure that this line is generally needed. - Mr Morgan
  • Thanks, both answers work ... But still, what exactly did he want from me? - rixxru 5:58 pm

0