簡體   English   中英

tkinter 多個類和全局變量

[英]tkinter multiple classes and global variables

Python 的新手,我目前正在嘗試使用 TKinter 制作我的第一個 GUI 應用程序。 該應用程序提示用戶從 4 個下拉小部件中選擇一個選項並選擇提交,這將導出一個 excel 電子表格(仍在實施)。

我讓 GUI 獨立工作,但我在使用需要在類之間使用的全局變量時遇到問題。

目前,當我運行代碼時,我收到錯誤“ init () 缺少 1 個必需的位置參數:‘提交’”。 我試過像這樣輸入'提交''main_window = open_mainprogram(root,submissions)',但這會產生錯誤:“名稱'提交'未定義”。

下面是我的 GUI 的主類:

from tkinter import *
from global_stuff import *


#submissions = []

class open_mainprogram(global_stuff):

    #submissions = []

    def __init__(self, master, submissions):
        #define main window#
        self.master = master
        master.title("Easier checking")
        master.minsize(width=400, height=400)
        master.maxsize(width=800, height=800)

        #Program Description#
        self.program_description= Label(self.master, text =("This program is to speed up the checking process by automating the filling in of the check list."))
        self.program_description.grid(columnspan = 10)

        #Label drop down menu week 1#
        self.week_onelabel = Label(self.master, text = ("|Week One Checks:|"))
        self.week_onelabel.grid(row = 2, column = 1)

        #Create drop down menu week 1#
        self.check_progressone = StringVar(self.master)
        self.check_progressone.set("Pending")
        self.select_optionone = OptionMenu(self.master, self.check_progressone, "Pending", "Completed")
        self.select_optionone.grid(row = 3, column = 1)

        #week 2#
        #Label drop down menu#
        self.week_onelabel = Label(self.master, text = ("|Week Two Checks:|"))
        self.week_onelabel.grid(row = 2, column = 3)

        #Create drop down menu#
        self.check_progresstwo = StringVar(self.master)
        self.check_progresstwo.set("Pending")
        self.select_optiontwo = OptionMenu(self.master, self.check_progresstwo, "Pending", "Completed")
        self.select_optiontwo.grid(row = 3, column = 3)

        #week 3#
        #Label drop down menu#
        self.week_onelabel = Label(self.master, text = ("|Week Three Checks:|"))
        self.week_onelabel.grid(row = 2, column = 5)

        #Create drop down menu#
        self.check_progressthree = StringVar(self.master)
        self.check_progressthree.set("Pending")
        self.select_optionthree = OptionMenu(self.master, self.check_progressthree, "Pending", "Completed")
        self.select_optionthree.grid(row = 3, column = 5)

        #week 4#
        #Label drop down menu#
        self.week_onelabel = Label(self.master, text = ("|Week Four Checks:|"))
        self.week_onelabel.grid(row = 2, column = 7)

        #Create drop down menu#
        self.check_progressfour = StringVar(self.master)
        self.check_progressfour.set("Pending")
        self.select_optionfour = OptionMenu(self.master, self.check_progressfour, "Pending", "Completed")
        self.select_optionfour.grid(row = 3, column = 7)

        #submit button#
        def submitted(self, submissions):
            submitted_first = self.check_progressone.get()
            submitted_second = self.check_progresstwo.get()
            submitted_third = self.check_progressthree.get()
            submitted_fourth = self.check_progressfour.get()
            #global submissions
            submissions = submitted_first + submitted_second + submitted_third + submitted_fourth
            print (submissions)
            return (submissions)


        self.submit_button = Button(master, text = "Submit", command = submitted)
        self.submit_button.grid(row = 4, column = 1)

        #Exit button#
        self.exit_button = Button(master, text = "Exit", command = (master.destroy))
        self.exit_button.grid(row = 5, column = 8)

        return (submissions)


root = Tk()
main_window = open_mainprogram(root)
root.mainloop()

下面是我的全局變量類:

class global_stuff:

    submissions = []

我在這里缺少什么?

編輯:如果我更改以下內容:

main_window = open_mainprogram(root)

然后是:

main_window = open_mainprogram(root, global_stuff)

我收到錯誤“ init () 應該返回 None,而不是‘類型’”

非常簡單。 在程序的最后,您嘗試創建一個main_window

main_window = open_mainprogram(root)

您將一個參數root傳遞給open_mainprogram 也就是說,您正在創建open_mainprogram類的一個實例(我認為它的名字很糟糕——這個名字暗示我它是一個函數,而不是一個類,但這是一個附帶問題)。 但是open_mainprogram類的初始化函數需要兩個參數:

def __init__(self, master, submissions):

不用說,當您嘗試創建open_mainprogram實例時,Python 會抱怨您沒有提供必要的參數之一,因為當初始化函數需要兩個參數時,您只傳遞了一個參數。

這將解決您的問題:

from tkinter import *


class global_stuff:

    submissions = []

    def test(self):

        print(self.submissions)


class TestClass(global_stuff):
    def __init__(self):
        self.test()


class open_mainprogram(global_stuff):

    def __init__(self, master):
        # define main window#
        self.master = master
        master.title("Easier checking")
        master.minsize(width=400, height=400)
        master.maxsize(width=800, height=800)

        # Program Description#
        self.program_description = Label(self.master,
                                         text="This program is to speed up the checking process by automating the "
                                              "filling in of the check list.")
        self.program_description.grid(columnspan=10)

        # Label drop down menu week 1#
        self.week_onelabel = Label(self.master, text="|Week One Checks:|")
        self.week_onelabel.grid(row=2, column=1)

        # Create drop down menu week 1#
        self.check_progressone = StringVar(self.master)
        self.check_progressone.set("Pending")
        self.select_optionone = OptionMenu(self.master, self.check_progressone, "Pending", "Completed")
        self.select_optionone.grid(row=3, column=1)

        # week 2#
        # Label drop down menu#
        self.week_onelabel = Label(self.master, text="|Week Two Checks:|")
        self.week_onelabel.grid(row=2, column=3)

        # Create drop down menu#
        self.check_progresstwo = StringVar(self.master)
        self.check_progresstwo.set("Pending")
        self.select_optiontwo = OptionMenu(self.master, self.check_progresstwo, "Pending", "Completed")
        self.select_optiontwo.grid(row=3, column=3)

        # week 3#
        # Label drop down menu#
        self.week_onelabel = Label(self.master, text="|Week Three Checks:|")
        self.week_onelabel.grid(row=2, column=5)

        # Create drop down menu#
        self.check_progressthree = StringVar(self.master)
        self.check_progressthree.set("Pending")
        self.select_optionthree = OptionMenu(self.master, self.check_progressthree, "Pending", "Completed")
        self.select_optionthree.grid(row=3, column=5)

        # week 4#
        # Label drop down menu#
        self.week_onelabel = Label(self.master, text="|Week Four Checks:|")
        self.week_onelabel.grid(row=2, column=7)

        # Create drop down menu#
        self.check_progressfour = StringVar(self.master)
        self.check_progressfour.set("Pending")
        self.select_optionfour = OptionMenu(self.master, self.check_progressfour, "Pending", "Completed")
        self.select_optionfour.grid(row=3, column=7)

        # submit button#
        def submitted():
            self.test()
            submitted_first = self.check_progressone.get()
            submitted_second = self.check_progresstwo.get()
            submitted_third = self.check_progressthree.get()
            submitted_fourth = self.check_progressfour.get()
            # global submissions
            self.submissions = submitted_first + submitted_second + submitted_third + submitted_fourth
            print(self.submissions)
            self.test()
            return self.submissions

        self.submit_button = Button(master, text="Submit", command=submitted)
        self.submit_button.grid(row=4, column=1)

        # Exit button#
        self.exit_button = Button(master, text="Exit", command=master.destroy)
        self.exit_button.grid(row=5, column=8)


root = Tk()
main_window = open_mainprogram(root)
root.mainloop()

這將解決您的問題。 我已經定義了一個test()內部函數global_stuff ,並呼吁它的頂部和底部的submitted()函數,以確保您的代碼的作品,我也做了一個TestClass ,以確保您。

暫無
暫無

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

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