Saya mencoba membuat semacam notepad dengan tkinter, yang akan menyertakan fitur Dark Mode. Kode saya adalah:

from tkinter import *

window = Tk()
window.geometry('700x500')

#The menu
menu = Menu(window)

#The Dark mode function:
x = 1
fg = 'black'
def DM_toggle(var):
    if x%2 == 0:
        window.config(bg = 'black')
        fg = 'white'
    else:
        window.config(bg = 'white')
        fg = 'black'
    x+= 1



#The file menu
file = Menu(menu, tearoff = 0)
menu.add_cascade(label = 'File', menu = file)
file.add_cascade(label = 'New File ')
file.add_cascade(label = 'Save File')
file.add_separator()
file.add_cascade(label = ' EXIT ', command = window.destroy)

#the dark_mode button
dark_mode = Menu(menu, tearoff = 0)
menu.add_cascade(label = 'Dark Mode', menu = dark_mode)
dark_mode.add_checkbutton(label = ' Dark Mode', command =lambda: DM_toggle(x+1))

#The placing of menu
window.config(menu = menu)

window.mainloop()

Dan ketika saya menjalankan kode dan mengklik tombol centang mode gelap, Saya mendapatkan Kesalahan Lokal Tidak Terikat ini:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\new\AppData\Local\Programs\Python\Python39-32\lib\tkinter\__init__.py", line 1885, in __call__
    return self.func(*args)
  File "F:/Python tries#1/Note Pad try 2/notepad.py", line 34, in <lambda>
    dark_mode.add_checkbutton(label = ' Dark Mode', command =lambda: DM_toggle(x+1))
  File "F:/Python tries#1/Note Pad try 2/notepad.py", line 13, in DM_toggle
    if x%2 == 0:
UnboundLocalError: local variable 'x' referenced before assignment

Bagaimana cara mengatasi Kesalahan ini? Saya ingin mengaktifkan fitur mode gelap!

0
Parvat . R 29 Desember 2020, 16:14

3 jawaban

Jawaban Terbaik

Cukup nyatakan variabel x Anda sebagai global di dalam fungsi Anda:

def DM_toggle(var):
    global x
    if x%2 == 0:
        window.config(bg = 'black')
        fg = 'white'
    else:
        window.config(bg = 'white')
        fg = 'black'
    x+= 1

Atau berikan sebagai parameter:

def DM_toggle(x):
    if x%2 == 0:
        window.config(bg = 'black')
        fg = 'white'
    else:
        window.config(bg = 'white')
        fg = 'black'
    x+= 1
1
ljuk 29 Desember 2020, 13:20
#The Dark mode function:
x = 1
fg = 'black'
def DM_toggle(var):
    if var%2 == 0:
        window.config(bg = 'black')
        fg = 'white'
    else:
        window.config(bg = 'white')
        fg = 'black'
    var+= 1

Gunakan var sebagai ganti x dalam fungsi DM_toggle

Lihat: https://pythoncircle .com/post/680/solving-python-error-unboundlocalerror-local-variable-x-referenced-before-assignment/

0
MRUNAL MUNOT 29 Desember 2020, 13:23
def DM_toggle(var):
    if x%2 == 0:
        window.config(bg = 'black')
        fg = 'white'
    else:
        window.config(bg = 'white')
        fg = 'black'
    x+= 1

Saat Anda memperbarui nilai variabel di dalam fungsi, itu menjadi terkunci ke lingkup lokal, sehingga tidak akan memeriksa nilai x di luar. Karena Anda tidak mendefinisikan x di dalam fungsi, itu tidak ditentukan ketika Anda mencoba memperbaruinya, maka UnboundLocalError: local variable 'x' referenced before assignment

Yang perlu Anda lakukan adalah membuat x global, dengan cara itu akan menggunakan x dalam lingkup global. Saya juga akan menghapus var dari argumen dan mengubah perintah menjadi hanya fungsi, karena hanya melihat dan mengubah variabel global x.

def DM_toggle():
    global x
    if x%2 == 0:
        window.config(bg = 'black')
        fg = 'white'
    else:
        window.config(bg = 'white')
        fg = 'black'
    x+= 1

... 

dark_mode.add_checkbutton(label = ' Dark Mode', command =DM_toggle) 
0
Further Reading 29 Desember 2020, 15:47