简体   繁体   English

如何使用Tkinter修复“无效的命令名称”错误

[英]How to fix “invalid command name” error with Tkinter

solved: as @furas said, I was trying to access email_text after I had already destroyed the window, so email_text no longer existed. 解决:正如@furas所说的,我已经在破坏窗口之后尝试访问email_text,因此email_text不再存在。

I'm trying to automate a login to a website by grabbing the email and password from an entry using tkinter. 我正在尝试通过使用tkinter从条目中获取电子邮件和密码来自动登录网站。 The code grabs the email and password and enters it in the site, and succesfully logs in. But I get an error about the email_text.get() line. 该代码获取电子邮件和密码,然后将其输入站点,然后成功登录。但是我收到关于email_text.get()行的错误。

Originally I had a prepare() and error() function, so if the login was insuccesful, it would call error() and prompt them to log in again. 最初我有一个prepare()和error()函数,因此,如果登录成功,它将调用error()并提示他们再次登录。 I had the same error then and wondered if it was an issue with some conflict between widgets in the functions? 然后我遇到了同样的错误,想知道这是否是函数中的小部件之间存在一些冲突的问题? So I just tried to simplify it into one, but I am still getting the same error. 因此,我只是尝试将其简化为一个,但是仍然遇到相同的错误。 I have 3 different versions of this code and I have been moving bits around, so it's possible that I didnt move something from the other 2 versions that was needed, but I cant figure out which part I could be missing. 我有3个不同版本的代码,而且我一直在移动,所以我可能没有从其他2个版本中移走某些东西,但我无法弄清楚我可能缺少的部分。

from Tkinter import *
from PIL import ImageTk,Image
import time
from datetime import tzinfo
from selenium.webdriver.support.ui import Select

chromedriver = "C:\Users\Alex\Desktop\chromedriver"
driver = webdriver.Chrome(chromedriver)
driver.get("https://www.soundclick.com/community/SC4/login.cfm")

def get_email_pass():
    while True:
        email = email_text.get()
        password = pass_text.get()
        my_window.destroy()
        xpathEmail = '//*[@id="email"]'
        loginEmail = driver.find_element_by_xpath(xpathEmail)
        loginEmail.send_keys(email)
        xpathPass = '//*[@id="password"]'
        loginPass = driver.find_element_by_xpath(xpathPass)
        loginPass.send_keys(password)
        xpathLogin = '//*[@id="loginform"]/div[3]/div[2]/input'
        login = driver.find_element_by_xpath(xpathLogin)
        login.click()
        time.sleep(5)

        if driver.current_url == "https://www.soundclick.com/bandAdmin2/default.cfm?ipv=0":
                exit


#open tkinter window
my_window=Tk()
#Title
my_window.title('SoundClick Login')
#Color
my_window.configure(background="deep sky blue")
#Instr 
email_label=Label(my_window, text="Please Enter The Email Used To Sign Into SoundClick")
email_label.config(background="deep sky blue", foreground="white")
#Create Entry
email_text = Entry(my_window)
email_text.pack()
pass_label=Label(my_window, text="Please Enter The Password Used To Sign Into SoundClick")
pass_label.config(background="deep sky blue", foreground="white")
pass_text=Entry(my_window)
pass_text.pack()


#Censor Password
pass_text.config(show="*")
song_text = Entry(my_window)
song_label=Label(my_window, text="Please Enter The Name Of The Song You Want To Promote. Warning:cAsE SensItIvE")
song_label.config(background="deep sky blue", foreground="white")
#When Done button is pressed, run cmd done_button
finish_button = Button(my_window, text="Done",command=get_email_pass)
finish_button.config(background="white")
note_label=Label(my_window, text="This information will not be stored anywhere")
note_label.config(background="deep sky blue", foreground="white")

#Positioning
email_label.grid(row=0, column=0)
email_text.grid(row=0, column=1)
pass_label.grid(row=1, column=0)
pass_text.grid(row=1, column=1)
finish_button.grid(row=3, column=0)

my_window.mainloop()

The webpage should close if the login is succesful, but instead it stays open and I get this error: 如果登录成功,则该网页应关闭,但它保持打开状态,并且出现此错误:

Traceback (most recent call last):
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1547, in __call__
    return self.func(*args)
  File "C:\Users\Alex\Desktop\Jon.py", line 14, in get_email_pass
    email = email_text.get()
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 2518, in get
    return self.tk.call(self._w, 'get')
TclError: invalid command name ".66283784L"```

@furas is right. @furas是正确的。 you are trying to access the contents of the email entry. 您正在尝试访问email条目的内容。 but on the first iteration, after you are closing the window, you are trying to access it again, but it has closed already! 但是在第一次迭代中,关闭窗口后,您尝试再次访问它,但是它已经关闭了!

to fix this you can move the my_window.destroy() from the while True loop to the if statement at the end of the function, so the window will only close after you have connected. 要解决此问题,您可以将my_window.destroy()while True循环移至函数末尾的if语句,因此仅在连接后窗口才会关闭。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM