簡體   English   中英

我無法在我的 Python 項目中使用多線程

[英]I am having trouble getting multithreading working in my Python project

我無法讓線程在我的代碼中工作。 如果我取出線程,for循環會將menu.txt附加到menu = []。 對於我的家庭作業,我需要更改它以使其與線程一起使用。 這是我到目前為止所擁有的,但我一直想出一個異常“模塊”object 不可調用。 我覺得我很接近,但我錯過了一些東西。

這是 itemClass.py -

class item(Thread): #class for the menu items
    def __init__(self, name, wholeSale, retail, orderCount):
        Thread.__init__(self)
        self.name = name
        self.wholeSale = wholeSale
        self.retail = retail
        self.orderCount = orderCount

這是 guiMain.py -

from tkinter import *
from tkinter import messagebox
from tkinter import ttk
from PIL import ImageTk,Image
import manager
import restaurant
import itemClass
import threading
from threading import *

if __name__ == "__main__":

    menu = []

    t1 = itemClass.item()
    t1.start()

    with open("menu.txt") as f: #reads menu.txt to store in menu variable
        for line in f.readlines():
            arr = line.split(",")
            menu.append(t1(arr[0],float(arr[1]),float(arr[2]),int(arr[3])))

mainGUI(菜單)

這是 menu.txt -

Chicken Sandwich,3.5,4.99,16
Spicy Chicken Sandwich,3.75,5.49,21
Chicken Tender Box,4.17,5.99,22
Spicy Tender Box,4.38,6.49,10
Fries,1.15,2.99,22

拋出的異常 -

Message=item.__init__() missing 4 required positional arguments: 'name', 
'wholeSale', 'retail', and 'orderCount'

Source=C:\Users\neodr\Desktop\PythonClass\Lesson10_2051495\Lesson10Project2_2051495\guiMain.py StackTrace:文件“C:\Users\neodr\Desktop\PythonClass\Lesson10_2051495\Lesson10Project2_2051495\guiMain.py”,第 46 行,在(當前框架) t1 = itemClass.item()

您描述的錯誤是一個基本錯誤,實際上與線程本身沒有任何關系。 您定義的itemClass.item class 期望得到四個 arguments。 當您嘗試在 GUI 代碼中創建 class 的實例時,您並沒有這樣做。 當您執行t1 = itemClass.item()時,您不會傳遞任何 arguments。 稍后在您的代碼中,您嘗試使用 arguments 調用t1 ,但這也不支持(您的 class 的實例不可調用)。

這些都沒有多大意義。 我懷疑潛在的問題是你試圖將線程插入一個沒有任何意義的地方。 您應該希望一個線程在您正在進行的事情發生的地方運行,並且您希望它在您在主線程中執行其他操作時繼續發生。 您顯示的代碼部分似乎與它不匹配。 您只是在這里定義菜單項。 沒有任何正在進行的事情需要線程。

您可能需要重新考慮此代碼的結構並將線程放在其他地方。 例如,菜單項一旦被選中,就可以啟動一個在后台持續運行的線程。 但是線程創建將由 GUI 內容(從菜單中選擇)觸發,而不是在定義菜單項時預先創建和啟動。

1.你還沒有在任何地方定義 itemClass 所以我假設你 ment item 所以嘗試: from itemClass import item

 t1 = item() 

2.you have not pass any arguments to init item of class

3.不清楚你想用線程實現什么

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM