微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python,Tkinter - 根未定义

如何解决Python,Tkinter - 根未定义

我有一个类 - 下面的代码 - 从 if __name__ == '__main__': 调用它时可以完美运行,但是当我从另一个 .py 文件调用它时,它会吐出错误。如果这是我的一个基本错误,我深表歉意,但我尝试了很多东西,但似乎没有任何效果,真的很想得到一些帮助!

错误

File "c:\Users\...\test.py",line 6,in <module>       
    app = Screenshot(root)
  File "c:\Users\...\Screenshot.py",line 18,in __init__
    self.master_screen = Toplevel(root)
NameError: name 'root' is not defined

班级:

import time
from tkinter import Toplevel,Canvas,Frame,BOTH,YES,Tk
import pyautogui
import datetime

class Screenshot():
    
    def __init__(self,master):
        self.master = master
        self.rect = None
        self.x = self.y = 0
        self.start_x = None
        self.start_y = None
        self.curX = None
        self.curY = None
        
        self.master_screen = Toplevel(root)
        self.master_screen.title("Fenify")
        self.master_screen.attributes("-transparent","blue")
        self.picture_frame = Frame(self.master_screen)
        self.picture_frame.pack(fill=BOTH,expand=YES)
        self.createScreenCanvas()

    #TakeScreenshot
    def takeBoundedScreenShot(self,x1,y1,x2,y2):
        ...
    #Window
    def createScreenCanvas(self):
        ...
    #Controls
    def on_button_press(self,event):
        ...

    def on_button_release(self,event):
        ...
    def on_right_click(self,event):
        ...
    def on_move_press(self,event):
        ...
    #Exit
    def exit_screenshot(self):
        ...

if __name__ == '__main__':
    root = Tk()
    app = Screenshot(root)
    root.mainloop()

从另一个调用的示例:

import tkinter
from Screenshot import Screenshot


root = tkinter.Tk()
app = Screenshot(root)
root.mainloop()

解决方法

您想将 Toplevel 的父/母设置为 self.master 而不是 rootroot 未在 Screenshot 类的范围内定义,但输入参数 master 确实指向它。

self.master_screen = Toplevel(self.master)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。