如何建立自定义模块并调用

from tkinter import *
from change import *

root = Tk()
root.geometry('480x480')
# 建立新窗口
def fun1():
    win = Toplevel()
    win.geometry('230x230')
    win.title('新窗口')
    Button(win,text='关闭',command=lambda :[win.destroy(),fun3()]).place(relx=0.4,rely=0.4)
# 改写按钮状态为’不可变‘
def fun2():
    but['state'] =DISABLED
# 改写按钮状态为’正常‘
def fun3():
    but['state']=NORMAL

but = Button(root,text='点击一次后状态改写',command=lambda :[fun1(),fun2()])        # (导入数据)建立新窗口
but.place(relx=0.3,rely=0.3,relwidth=0.4)
lb = Message(root,text='''点击一次按钮,弹出一个新窗口后,按钮的状态变为灰色,再次点击新窗口中的’关闭‘键后,按钮的状态恢复正常,即每次只能创建一次新窗口。''',relief=GROOVE)
lb.place(relx=0.1,rely=0.5,width=300,relheight=0.4)

root.mainloop()

我想把以上自定义函数全部放在另一个文件中,然后调用这个文件,但是不成功,原因是fun3(),fun2()中的but参数无法解析,我不知道该怎么改,谁能教教我,谢谢大佬!

from tkinter import *                       #  b.py  主程序段
import a
root = Tk()
root.geometry('480x480')
# 建立新窗口                                              # 把‘but’ 按钮从主程序传给a.py中    

but = Button(root,text='点击一次后状态改写',command=lambda :[a.fun1(but),a.fun2(but)])        # (导入数据)建立新窗口
but.place(relx=0.3,rely=0.3,relwidth=0.4)
lb = Message(root,text='''点击一次按钮,弹出一个新窗口后,按钮的状态变为灰色,再次点击新窗口中的’关闭‘键后,按钮的状态恢复正常,即每次只能创建一次新窗口。''',relief=GROOVE)
lb.place(relx=0.1,rely=0.5,width=300,relheight=0.4)

root.mainloop()
from tkinter import *                   #  a.py  放置函数的文件

def fun1(but):
    win = Toplevel()                        # 关键在于给函数添加一个参数
    win.geometry('230x230')
    win.title('新窗口')
    Button(win,text='关闭',command=lambda :[win.destroy(),fun3(but)]).place(relx=0.4,rely=0.4)
# 改写按钮状态为’不可变‘
def fun2(but):
    but['state'] =DISABLED

def fun3(but):
    but['state']=NORMAL

 

我试了一下 调用没问题啊。你那个主程序看一下是怎么写的

from tkinter import *                        # 我把函数放在a.py中----(这段代码是在a.py中)

def fun1():
    win = Toplevel()
    win.geometry('230x230')
    win.title('新窗口')
    Button(win,text='关闭',command=lambda :[win.destroy(),fun3()]).place(relx=0.4,rely=0.4)
# 改写按钮状态为’不可变‘
def fun2():
    but['state'] =DISABLED     # 这里系统提示错误,说'but' 没有定义,但是'but'是在主程序定义的

def fun3():
    but['state']=NORMAL
from tkinter import *                    # 这段代码是在b.py 中
import a
root = Tk()                             # 这是主程序 ,然后调用a.py模块
root.geometry('480x480')
# 建立新窗口

but = Button(root,text='点击一次后状态改写',command=lambda :[a.fun1(),a.fun2()])  
      
but.place(relx=0.3,rely=0.3,relwidth=0.4)
lb = Message(root,text='''点击一次按钮,弹出一个新窗口后,按钮的状态变为灰色,再次点击新窗口中的’关闭‘键后,按钮的状态恢复正常,即每次只能创建一次新窗口。''',relief=GROOVE)
lb.place(relx=0.1,rely=0.5,width=300,relheight=0.4)

root.mainloop()

你看一下,点击按钮后,按钮状态没有被改写,说明fun2没有被调用。

but是一个变量 没有定义 怎么使用

学到了