Получаем странную ошибку отступа на python tkinter - unindent не соответствует ни одному внешнему уровню отступа - PullRequest
0 голосов
/ 07 февраля 2019

Я просто добавляю 1 def с двумя строками кода, прежде чем он получит ошибку отступа.Я пытаюсь изменить код, сгенерированный из PAGE Tkinter GUI редактора для окна сообщения входа.Я действительно не знаю, почему это происходит.

Я сделал тот же код, что и этот парень на youtube , и я попытался переместить определение в крайнюю левую ни правую сторону.

Так что я пытаюсь добавить это.def cancelLogin() внутри класса страницы входа.Это показывает мне ошибку отступа на def init().Пожалуйста, помогите мне разобраться в этом.

#! /usr/bin/env python
#  -*- coding: utf-8 -*-
#
# GUI module generated by PAGE version 4.20
#  in conjunction with Tcl version 8.6
#    Feb 07, 2019 05:38:55 AM EST  platform: Linux

import sys
import tkMessageBox

try:
    import Tkinter as tk
except ImportError:
    import tkinter as tk

try:
    import ttk
    py3 = False
except ImportError:
    import tkinter.ttk as ttk
    py3 = True

import jta_support

def vp_start_gui():
    '''Starting point when module is the main routine.'''
    global val, w, root
    root = tk.Tk()
    top = Login_page (root)
    jta_support.init(root, top)
    root.mainloop()

w = None
def create_Login_page(root, *args, **kwargs):
    '''Starting point when module is imported by another program.'''
    global w, w_win, rt
    rt = root
    w = tk.Toplevel (root)
    top = Login_page (w)
    jta_support.init(w, top, *args, **kwargs)
    return (w, top)

def destroy_Login_page():
    global w
    w.destroy()
    w = None

class Login_page:

    def cancelLogin(self):
        msg=tkMessageBox.askyesno("Login page","Are you sure , you want to cancel login?")

    def __init__(self, top=None):
        '''This class configures and populates the toplevel window.
           top is the toplevel containing window.'''
        _bgcolor = '#d9d9d9'  # X11 color: 'gray85'
        _fgcolor = '#000000'  # X11 color: 'black'
        _compcolor = '#d9d9d9' # X11 color: 'gray85'
        _ana1color = '#d9d9d9' # X11 color: 'gray85' 
        _ana2color = '#ececec' # Closest X11 color: 'gray92' 
        font11 = "-family {DejaVu Sans} -size 10 -weight bold -slant "  \
            "roman -underline 0 -overstrike 0"
        font17 = "-family {DejaVu Sans} -size 13 -weight bold -slant "  \
            "roman -underline 0 -overstrike 0"
        self.style = ttk.Style()
        if sys.platform == "win32":
            self.style.theme_use('winnative')
        self.style.configure('.',background=_bgcolor)
        self.style.configure('.',foreground=_fgcolor)
        self.style.configure('.',font="TkDefaultFont")
        self.style.map('.',background=
            [('selected', _compcolor), ('active',_ana2color)])

        top.geometry("584x457+1039+55")
        top.title("JTA Login")
        top.configure(relief="ridge")
        top.configure(background="#201856")
        top.configure(highlightbackground="#000000")

        self.btnLogin = tk.Button(top)
        self.btnLogin.place(relx=0.634, rely=0.744, height=54, width=101)
        self.btnLogin.configure(background="#201856")
        self.btnLogin.configure(borderwidth="0")
        self.btnLogin.configure(font=font11)
        self.btnLogin.configure(highlightbackground="#201856")
        self._img1 = tk.PhotoImage(file="../../Downloads/button.png")
        self.btnLogin.configure(image=self._img1)
        self.btnLogin.configure(padx="6m")
        self.btnLogin.configure(pady="3m")
        self.btnLogin.configure(text='''Login''')
        self.btnLogin.configure(width=101)

        self.btnExit = tk.Button(top)
        self.btnExit.place(relx=0.223, rely=0.744, height=55, width=97)
        self.btnExit.configure(activebackground="#ffffff")
        self.btnExit.configure(background="#201856")
        self.btnExit.configure(borderwidth="0")
        self.btnExit.configure(font=font11)
        self.btnExit.configure(highlightbackground="#201856")
        self._img2 = tk.PhotoImage(file="../../Downloads/button(1).png")
        self.btnExit.configure(image=self._img2)
        self.btnExit.configure(padx="6m")
        self.btnExit.configure(pady="3m")
        self.btnExit.configure(text='''Exit''')
        self.btnExit.configure(width=97)

        self.txtUsername = tk.Entry(top)
        self.txtUsername.place(relx=0.462, rely=0.372, height=40, relwidth=0.342)

        self.txtUsername.configure(background="white")
        self.txtUsername.configure(font="TkFixedFont")

        self.txtPassword = tk.Entry(top)
        self.txtPassword.place(relx=0.462, rely=0.547, height=40, relwidth=0.342)

        self.txtPassword.configure(background="white")
        self.txtPassword.configure(font="TkFixedFont")
        self.txtPassword.configure(selectbackground="#c4c4c4")

        self.Label1 = tk.Label(top)
        self.Label1.place(relx=0.205, rely=0.372, height=40, width=100)
        self.Label1.configure(background="#201856")
        self.Label1.configure(font=font17)
        self.Label1.configure(foreground="#ffffff")
        self.Label1.configure(text='''Username''')

        self.Label1_3 = tk.Label(top)
        self.Label1_3.place(relx=0.205, rely=0.547, height=40, width=100)
        self.Label1_3.configure(activebackground="#f9f9f9")
        self.Label1_3.configure(background="#201856")
        self.Label1_3.configure(font=font17)
        self.Label1_3.configure(foreground="#ffffff")
        self.Label1_3.configure(text='''Password''')

        self.menubar = tk.Menu(top,font="TkMenuFont",bg=_bgcolor,fg=_fgcolor)
        top.configure(menu = self.menubar)

        self.TLabel1 = ttk.Label(top)
        self.TLabel1.place(relx=0.154, rely=0.022, height=131, width=423)
        self.TLabel1.configure(background="#201856")
        self.TLabel1.configure(foreground="#000000")
        self.TLabel1.configure(font="TkDefaultFont")
        self.TLabel1.configure(relief='flat')
        self.TLabel1.configure(text='''Tlabel''')
        self.TLabel1.configure(width=423)
        self._img3 = tk.PhotoImage(file="./jtalogo.png")
        self.TLabel1.configure(image=self._img3)

if __name__ == '__main__':
    vp_start_gui()

без "def cancelLogin ()", он работает нормально, как обычно

фактический результат: Файл "./jta.py", строка 52def init (self, top = None): ^ IndentationError: unindent не соответствует ни одному внешнему уровню отступа

1 Ответ

0 голосов
/ 07 февраля 2019

Вы можете попробовать:

grep -C 7 "__init" YOUR_FILE.py | tr ' \t' '.*'

Это преобразует пробелы в точки, а табуляции в звезды.Затем вы можете проверить, есть ли там несоответствие.

Это вывод, когда я попробовал его в коде, который вы разместили (из источника вопроса):

$ grep -C 7 "__init" test.py | tr ' \t' '.*'
........w.=.None
....
....class.Login_page:
....
....*def.cancelLogin(self):
....**msg=tkMessageBox.askyesno("Login.page","Are.you.sure.,.you.want.to.cancel.login?")
....
........def.__init__(self,.top=None):
............'''This.class.configures.and.populates.the.toplevel.window.
...............top.is.the.toplevel.containing.window.'''
............_bgcolor.=.'#d9d9d9'..#.X11.color:.'gray85'
............_fgcolor.=.'#000000'..#.X11.color:.'black'
............_compcolor.=.'#d9d9d9'.#.X11.color:.'gray85'
............_ana1color.=.'#d9d9d9'.#.X11.color:.'gray85'.
............_ana2color.=.'#ececec'.#.Closest.X11.color:.'gray92'.

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

...