我已尝试过多处理和线程以实现我的目标,但无论如何我遇到了两个错误之一。当我单击一个Tkinter按钮时,我调用一个函数,我想同时执行一个涉及新窗口的类和一个计时器。但是,它将始终执行计时器,然后在执行类之前等待while循环完成。所以结果我把它分成了一个目标而args然而现在我得到了:
我得到TypeError int不是Iterable
def quiz():
th1 = threading.Thread(target=QuizApp)
th2 = threading.Thread(target=timecount, args=(int(countmin.get())))
th2.start()
th1.start()
这是按钮调用的函数(countmin.get()正在检索旋转框的文本变量)
#Importing Python Packages
import sys
import time
import threading
from tkinter import *
from tkinter import ttk
import tkinter as tk
#Loading Of Images
LARGE_FONT= ("Verdana", 12)
class QuizApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
tk.Tk.iconbitmap(self, default='icon.ico')
tk.Tk.wm_title(self, "Bugz - HSC SDD Quiz")
container = ttk.Frame(self)
container.pack(side="top", fill="both", expand = True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (StartPage, PageFinish, Page1, Page2, Page3, Page4, Page5, Page6, Page7, Page8, Page9, Page10):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
ttk.Frame.__init__(self,parent)
label = ttk.Label(self, text="Welcome To The Quiz!", font=LARGE_FONT)
label.pack(pady=10,padx=10)
button1 = ttk.Button(self, text="Next",
command=lambda: controller.show_frame(Page1))
button1.pack()
这是Class QuizApp()的一部分
#Used to Determine the customisable counter as well as general time management
#Should be noted 59 seconds is used because function begins counting every second at 00 instead of 01
def timecount(minutes):
start = time.time()
time.clock()
sec_elapsed = 0
min_elapsed = 0
while min_elapsed < minutes:
sec_elapsed = time.time() - start
print("minutes count:",min_elapsed,"loop cycle time: %f, seconds count: %02d" % (time.clock() , sec_elapsed))
time.sleep(1)
if sec_elapsed > 59:
min_elapsed += 1
start = time.time()
print("Times Up!")
这是一个似乎总是先在线程或多进程中激活的计数器。我有while循环,因为它完成后我会用它来先发制人地完成测验。
我尝试了各种方法来解决这个问题,但无济于事。如果我尝试用以下代码替换线程:
我觉得这是一个愚蠢的错误,虽然我无法发现它。