首页 > 解决方案 > Python tkinter 输入框和函数访问类外

问题描述

我一直在搜索很多,但我仍然不知道如何从 python 中的不同类访问变量。我必须访问名为 Forget_PW 的类中的变量(变量 = user_input_resendCode)。然后,我还想要一个按钮来访问类外的函数(名为 OTP)。函数 (sendingSMS) 将在 (user_input_resendCode) 中获取用户的输入。如何访问课堂外的输入框以及如何访问课堂外的命令(函数)?谢谢

这是我的代码。

**class Forget_PW:**
def __init__(self, top=None):
    self.background = Label(forget)
    self.background.place(relx=0, rely=0, width=1366, height=768)
    self.bg_img = PhotoImage(file="./images/bg.png")
    self.background.configure(image=self.bg_img)

    # ============================================
    # Sign-in Form (Admin)
    # ============================================
    self.forgetpw_form = Label(forget)
    self.forgetpw_form.place(relx=0.1, rely=0.190, width=450, height=550)
    self.forgetpw_form_Image = Image.open("./images/forgetPasswordForm_first.png")
    forgetpw_form_ImageResized = self.forgetpw_form_Image.resize((450, 550), Image.ANTIALIAS)
    self.forgetpw_form_Image = ImageTk.PhotoImage(forgetpw_form_ImageResized)
    self.forgetpw_form.configure(image=self.forgetpw_form_Image)

    # ============================================
    # Logo (Company)
    # ============================================
    self.logo = Label(forget, bg="black")
    self.logo.place(relx=0.22, rely=0.05, width=100, height=100)
    self.logo_image = Image.open("./images/Logo1.png")
    resized = self.logo_image.resize((100, 100), Image.ANTIALIAS)
    self.logo_image = ImageTk.PhotoImage(resized)
    self.logo.configure(image=self.logo_image)

    # ============================================
    # Image Slideshow
    # ============================================
    def start():
        global i, show
        if i >= (len(images) - 1):
            i = 0
            slide_image.config(image=images[i])
        else:
            i = i + 1
            slide_image.configure(image=images[i])
        show = slide_image.after(2000, start)

    image1 = Image.open("./images/milktea4.png")
    resized1 = image1.resize((650, 800), Image.ANTIALIAS)
    image1 = ImageTk.PhotoImage(resized1)
    image2 = Image.open("./images/milktea5.jpg")
    resized2 = image2.resize((650, 800), Image.ANTIALIAS)
    image2 = ImageTk.PhotoImage(resized2)
    image3 = Image.open("./images/milktea6.jpg")
    resized3 = image3.resize((650, 800), Image.ANTIALIAS)
    image3 = ImageTk.PhotoImage(resized3)
    # label1.configure(image=new_pic)

    # create list of images
    images = [image1, image2, image3]
    # configure the image to the Label
    i = 0
    slide_image = Label(forget, image=images[i])
    slide_image.place(relx=0.56, rely=0, width=650, height=800)

    if i >= (len(images) - 1):
        i = 0
        slide_image.config(image=images[i])
    else:
        i = i + 1
        slide_image.configure(image=images[i])
    show = slide_image.after(2000, start)

    # ============================================
    # User Input (OTP)
    # ============================================
    **self.user_input_resendcode** = EntryWithPlaceholder(forget, 'Enter Username or Email')
    self.user_input_resendcode.place(relx=0.135, rely=0.477, width=300, height=24)
    self.user_input_resendcode.configure(font=("Corbel", 15))
    self.user_input_resendcode.configure(relief="flat")


**class OTP:**
def __init__(self, top=None):
    top.geometry("1366x768")
    top.resizable(0, 0)
    top.title("Invoices")
    # ============================================
    # Yellow background
    # ============================================
    self.background_otp = Label(otp1)
    self.background_otp.place(relx=0, rely=0, width=1366, height=768)
    self.bg_img_otp = PhotoImage(file="./images/bg.png")
    self.background_otp.configure(image=self.bg_img_otp)

    # ============================================
    # Sign-in Form (Admin)
    # ============================================
    self.forgetpw_form = Label(otp1)
    self.forgetpw_form.place(relx=0.1, rely=0.190, width=450, height=550)
    self.forgetpw_form_Image = Image.open("./images/forgetPasswordForm.png")
    forgetpw_form_ImageResized = self.forgetpw_form_Image.resize((450, 550), Image.ANTIALIAS)
    self.forgetpw_form_Image = ImageTk.PhotoImage(forgetpw_form_ImageResized)
    self.forgetpw_form.configure(image=self.forgetpw_form_Image)

    # ============================================
    # Logo (Company)
    # ============================================
    self.logo = Label(otp1, bg="black")
    self.logo.place(relx=0.22, rely=0.05, width=100, height=100)
    self.logo_image = Image.open("./images/Logo1.png")
    resized = self.logo_image.resize((100, 100), Image.ANTIALIAS)
    self.logo_image = ImageTk.PhotoImage(resized)
    self.logo.configure(image=self.logo_image)

    # ============================================
    # Image Slideshow
    # ============================================
    def start():
        global i, show
        if i >= (len(images) - 1):
            i = 0
            slide_image.config(image=images[i])
        else:
            i = i + 1
            slide_image.configure(image=images[i])
        show = slide_image.after(2000, start)

    image1 = Image.open("./images/milktea4.png")
    resized1 = image1.resize((650, 800), Image.ANTIALIAS)
    image1 = ImageTk.PhotoImage(resized1)
    image2 = Image.open("./images/milktea5.jpg")
    resized2 = image2.resize((650, 800), Image.ANTIALIAS)
    image2 = ImageTk.PhotoImage(resized2)
    image3 = Image.open("./images/milktea6.jpg")
    resized3 = image3.resize((650, 800), Image.ANTIALIAS)
    image3 = ImageTk.PhotoImage(resized3)
    # label1.configure(image=new_pic)

    # create list of images
    images = [image1, image2, image3]
    # configure the image to the Label
    i = 0
    slide_image = Label(otp1, image=images[i])
    slide_image.place(relx=0.56, rely=0, width=650, height=800)

    if i >= (len(images) - 1):
        i = 0
        slide_image.config(image=images[i])
    else:
        i = i + 1
        slide_image.configure(image=images[i])
    show = slide_image.after(2000, start)

    # ============================================
    # User Input (OTP)
    # ============================================
    self.user_input_resendcode1 = EntryWithPlaceholder(otp1, 'Enter OTP')
    self.user_input_resendcode1.place(relx=0.135, rely=0.477, width=300, height=24)
    self.user_input_resendcode1.configure(font=("Corbel", 15))
    self.user_input_resendcode1.configure(relief="flat")

    # ============================================
    # Resend Code Button
    # ============================================
    self.resend_code = Button(otp1)
    self.resend_code.place(relx=0.333, rely=0.550, width=100, height=15)
    self.resend_code.configure(relief="flat",
                                overrelief="flat",
                                activebackground="white",
                                cursor="hand2",
                                bg="white",
                                # foreground="#ffffff",
                                # background="#ffffff",
                                borderwidth="0")
    self.resend_code_Image = Image.open("./images/resendCode.png")
    resend_code_ImageResized = self.resend_code_Image.resize((100, 15), Image.ANTIALIAS)
    self.resend_code_Image = ImageTk.PhotoImage(resend_code_ImageResized)
    self.resend_code.configure(image=self.resend_code_Image)
    self.resend_code.configure(**command=sendingSMS**)

**def sendingSMS():**
find_user = "SELECT * FROM employee WHERE username = %s OR email_address = %s"
**cur.execute(find_user, [user_input_resendcode.get(), user_input_resendcode.get()])**
results = cur.fetchall()
if results:
    if results[0][10] == "Admin":
        client = Client('AC544a74e1519b84282c6d22e90d4dbe12', 'a85d7a3f765b109c3982269961eb6d49')

        client.messages.create(from_='+19546211198', to=results[0][3], body="Your OTP is:" + otp)

        messagebox.showinfo("info", "OTP sent to your registered mobile number")

    else:
        messagebox.showerror("Oops!!", "You are not an admin.")

else:
    messagebox.showerror("Error", "Incorrect username or password.")
    

标签: pythontkinter

解决方案


推荐阅读