2017-07-25 39 views
1

を破壊されており、出力で新しいメッセージに気づい:は「イベント」コマンドを呼び出すことはできません。アプリケーションは、だから私は、今日の私のコードの一部をデバッグた

can't invoke "event" command: application has been destroyed 
    while executing 
"event generate $w <<ThemeChanged>>" 
    (procedure "ttk::ThemeChanged" line 6) 
    invoked from within 
"ttk::ThemeChanged" 

を私はので、それを上に関する質問を見てしかし、彼らはこのエラーの例には関係しませんでした。 ttkウィジェットについては、私は自分のコードでttkを一度使っていませんでした。私のコードで "ttk"という文字列を検索すると、何も得られません。この出力コードの

チャンク:

def GoToEvent(self, controller, driver): 

    wait = WebDriverWait(driver, 600) 

    var = Vars() 
    entertain = var.GetVars("Link") 
    if type(entertain) == type(""): 
     event = var.GetVars("Event") 
     entertain = driver.find_element_by_partial_link_text(event) 
    entertain.click() 
    try: 
     # we have to wait for the page to refresh, the last thing that seems to be updated is the title 
     wait.until(EC.title_contains("Entertain")) 
    finally: 
     # the page is ajaxy so the title is originally this: 
     msg = driver.title 
     label = tk.Label(self, text=msg, cursor='spinning', font="courier 24", bg="#c63f17") 
     label.place(x=self.winfo_width()/2, y=self.winfo_height()/2, anchor="center") 
     self.update() # <--- This is where the problem is 
     label.destroy() 

これは実際にすべてのエラーをスローしていないようだ、と私のコードは絶対に細かい動作します。私は問題を再現するのに十分なコードを与えることができません。なぜなら、このコードはあまりにも多くのコードであるからです。しかし、それが役に立ったら、私が行ったすべてのテストを教えてくれます。私はこのコードブロックをデバッグし、にブレークポイントを追加するとこのエラーが発生することが判明しましたが、前にどこかに配置してに踏み込んでも印刷されませんでした。これはself.update()私はtime.sleep(5)の前後にself.update()のエラーがあった。コードをステップ実行するとエラーは表示されませんでしたが、time.sleep()は引き続きエラーを示しました。これは私を困惑させます、なぜ私はこのように行動するのかわかりません、私は2週間このプログラムを書いています、そして、これが起こったのは初めてです。誰もそれがうまくいないと知っていれば、コードはまだ完全に実行されていますが、私はちょうどこれが何を意味し、なぜ起こっているのか不思議です。ありがとう!コードの

始まり:デバッグは、私が何かをオフに見つけようとするコードを読み取るために持っていたコードの右側の領域を指摘したことがないよう

# !/usr/bin/python 
# coding: utf-8 
''' 
Created on Jun 23, 2017 

@author: jacob <---------------- Line 6 

''' 


from selenium import webdriver 
#from selenium.common.exceptions import TimeoutException 
from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0 
from selenium.webdriver.support import expected_conditions as EC# available since 2.26.0 
from selenium.webdriver.common.by import By 
from selenium.common.exceptions import NoSuchElementException 
import os 
import platform 
import pwd 
import re 
import time 
#import datetime 
from time import strftime 
import Tkinter as tk  
import tkFont as tkfont 
from Tkinter import Entry, Menu, Menubutton, Canvas 
+0

だけのアイデアが、あなたは、 'update_idletasksを()'てみたのですか? – Gribouillis

+0

エラーはかなり明らかです:ルートウィンドウが破棄された後に何かがコールバックを引き起こしています。エラーメトリックttkウィジェットと投稿したコードのどこにもttkウィジェットを使用しているので、何も言えません。 –

+0

@Gribouillisはい私は試しましたが、修正しませんでした – Jake

答えて

0

これは、見つけることは非常に難しいエラーでした。そこで、プログラムはキーワードのユーザ入力を取得し、このキーワードを含むイベントをウェブサイトで検索し、ドロップダウンメニューに入れる。キーワードの出現が1つだけまたは全くない場合、メニューは表示されず、イベントをクリックするか、キーワードに最も近い候補イベントでユーザーにプロンプ​​トが表示されます。これは、メニューが表示されていないときにのみ発生したため、このエラーが発生した可能性が高い領域のようです。このからのコード:

if (len(options) > 1): 

     button6 = tk.Button(selectMenu, text="Enter", 
         cursor='pointinghand', command=lambda: self.GetSelection(str(var.GetVars("Selection")), links, options, selectMenu, controller)) 

     msg = "Which one would you like to attend?" 
     label = tk.Label(selectMenu, text=msg, font="Helvedica 14") 
     label.pack(side='top', pady=10) 
     menbutton.pack(side="top", pady=10)   
     button6.pack(pady=10) 

     self.Progress() 

     selectMenu.attributes('-topmost', True) 
     selectMenu.mainloop() 
    elif options: 
     var.SendVars("selLink", links[0]) 
     selectMenu.destroy() 
     self.Progress() 
    else: 
     var.SendVars("Link", 'NO-LINK-FOUND') 
     selectMenu.destroy() 
     self.Progress() 

それは、このエラーは、それが破壊されたにもかかわらず、TKウィンドウで作成されたが、メインループに到達したことがないされているメニューボタンによって引き起こされたことが判明しました。別のtkウィンドウのメインループに達すると、エラーがスローされます。したがって、これを修正するには、Menubuttonの作成を以下のようにmainloopに到達する場所に移動します。

enter image description here

関連する問題