有没有一个好的例子可以对Tkinter应用进行功能测试?

20

我找到了一个很棒的网站,讨论了使用 IronPython 进行 Python GUI 应用程序的功能测试,但我想使用 Tkinter,并且在两个库之间转换很困难。

Michael 在 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应用程序的功能测试并不常见?


2个回答

1
对于基于Tkinter的应用程序,处理方式会有所不同。 在基于Tkinter的应用程序中,您可以使用StringVar或IntVar的trace方法。像这样:

from tkinter import * from tkinter import ttk

def on_value_change(*args):
    print("Value changed to:", var.get())

root = Tk()
var = StringVar()
var.trace("w", on_value_change) # detect changes in the variable
ttk.Entry(root, textvariable=var).grid()
root.mainloop()

-8

所以明确一下,你想要一个运作良好的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())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接