Python 3.6 - 线程执行而不是并行执行的线程

时间:2017-12-14 06:02:55

标签: python multithreading python-3.x class time

我已尝试过多处理和线程以实现我的目标,但无论如何我遇到了两个错误之一。当我单击一个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循环,因为它完成后我会用它来先发制人地完成测验。

我尝试了各种方法来解决这个问题,但无济于事。如果我尝试用以下代码替换线程:

我觉得这是一个愚蠢的错误,虽然我无法发现它。

0 个答案:

没有答案
相关问题