首页 > 解决方案 > 在 python tkinter 上出现奇怪的缩进错误 - unindent 与任何外部缩进级别都不匹配

问题描述

我只是在出现缩进错误之前用 2 行代码添加 1 个 def。我正在尝试修改从 PAGE TkinterGUI 编辑器生成的用于登录消息框的代码。我真的不知道为什么会这样。

我在 youtube 上做了与这个人完全相同的代码,我试图将 def 移到最左边和最右边。

所以我要补充的是。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”,第 52 行 def init (self, top=None): ^ IndentationError: unindent does not match any external indentation level

标签: pythontkinterindentation

解决方案


你可以试试:

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 所述,您添加的行中混合了制表符和空格。


推荐阅读