Кто-нибудь знает хороший пример функционального тестирования приложения Python Tkinter?

Я нашел отличный веб-сайт, в котором обсуждается функциональное тестирование приложения GUI Python с использованием IronPython: http://www.voidspace.org.uk/python/articles/testing/, но я хочу использовать Tkinter, и мне сложно переходить между библиотек.

Майкл показывает этот пример для IronPython:

class FunctionalTest(TestCase): def setUp(self): self.mainForm = None self._thread = Thread(ThreadStart(self.startMultiDoc)) self._thread.SetApartmentState(ApartmentState.STA) self._thread.Start() while self.mainForm is None: Thread.CurrentThread.Join(100) def invokeOnGUIThread(self, function): return self.mainForm.Invoke(CallTarget0(function)) 

… и мне сложно перевести это на то, как я подключу к Tkinter-приложению, которое будет иметь базовую настройку:

 from tkinter import * from tkinter import ttk root = Tk() ttk.Button(root, text="Hello World").grid() root.mainloop() 

… Я думаю, что вы захотите запустить метод на основном корневом объекте во втором потоке, но я не вижу эквивалентного метода для mainForm.Invoke (). Возможно, я думаю об этом неправильно. Может быть, функциональное тестирование GUI-приложений таким образом не так распространено?

Примеры были бы замечательными!

    Итак, чтобы быть понятным, вы хотите работать с программой tkinter? Если вы сделаете это, если нет, я сожалею, что трачу ваше время, потому что я пропустил ваш вопрос. Вот кое-что, над чем я работал некоторое время. Это еще не сделано. Это входной экран, который в конечном итоге будет проверять имя пользователя и пароль.

     import tkinter def Mainscreen(): def Validate(): with open('Users.txt', 'w') as fout: fout.write("test") def Quit(): window.destroy() def Sighnup(): window2 = tkinter. Tk() def Quit2 (): window2.destroy() def Sighnup(): with open('Users.txt', 'w') as fout: fout.write(ent.get()) fout.write(ent2.get()) fout.write(ent3.get()) fout.write(ent4.get()) fout.write(ent5.get()) window2.destroy() window2.geometry("195x135") window2.title("Sighnup") window2.wm_iconbitmap('favicon.ico') lbl= tkinter.Label(window2, text="First Name:") lbl2= tkinter.Label(window2, text="Last Name:") lbl3= tkinter.Label(window2, text="Email:") lbl4= tkinter.Label(window2, text="Username:") lbl5= tkinter.Label(window2, text="Password:") ent= tkinter.Entry(window2) ent2= tkinter.Entry(window2) ent3= tkinter.Entry(window2) ent4= tkinter.Entry(window2) ent5= tkinter.Entry(window2) btn= tkinter.Button(window2, text="Submit", command=Sighnup) #command=Loginpostsighnup btn2= tkinter.Button(window2, text="Quit", command=Quit2) lbl.grid(row=0, column=0) ent.grid(row=0, column=1) lbl2.grid(row=1, column=0) ent2.grid(row=1, column=1) lbl3.grid(row=2, column=0) ent3.grid(row=2, column=1) lbl4.grid(row=3, column=0) ent4.grid(row=3, column=1) lbl5.grid(row=4, column=0) ent5.grid(row=4, column=1) btn2.grid(row=5, column=1) btn.grid(row=5, column=0) window2.mainloop() window = tkinter. Tk() window.geometry("195x135") window.title("Login") window.wm_iconbitmap('favicon.ico') lbl6= tkinter.Label(window, text="Login:") lbl7= tkinter.Label(window, text="Username:") lbl8= tkinter.Label(window, text="Password:") ent6= tkinter.Entry(window) ent7= tkinter.Entry(window) btn3= tkinter.Button(window, text="Login") btn4= tkinter.Button(window, text="Sighn up", command=Sighnup) btn5= tkinter.Button(window, text="Quit", command=Quit) lbl6.grid(row=0, column=0) lbl7.grid(row=1, column=0) lbl8.grid(row=2, column=0) ent6.grid(row=1, column=1) ent7.grid(row=2, column=1) btn3.grid(row=3, column=1) btn4.grid(row=3, column=0) btn5.grid(row=4, column=0) #main (Mainscreen())