我正在嘗試將具有多個類的 tkinter 應用程式分解為多個 .py 檔案。我正在使用 Mixin 類將方法匯入每個類。但是,我正在努力訪問變數。
main.py 包含一個創建主視窗的類,帶有一個用于打開頂層視窗的按鈕和一個用于從 Mixin 獲取變數的按鈕。
# main.py
import tkinter
from tkinter import Tk
import customtkinter
import sys
sys.path.insert(1, "path/Classes")
from Classes import topLevel
# Main Window
class App(customtkinter.CTk):
def __init__(self):
super().__init__()
# Top Level Button
self.topLevel_button = customtkinter.CTkButton(master=self,
text="Open",
command=self.openTopLevel)
self.topLevel_button.grid(row=0, column=0)
# Get Variable
self.get_button = customtkinter.CTkButton(master=self,
text="Get Variable",
command=self.getVariable)
self.get_button.grid(row=1, column=0)
def openTopLevel(self):
window = topLevel.topLevel(self)
def getVariable(self):
print(var) # Can't access var
if __name__ == "__main__":
app = App()
app.mainloop()
topLevel.py 是一個創建頂級視窗的類。它包含一個變數 fileSep 供 Mixin 類中的方法使用:
# topLevel.py
sys.path.insert(1, "path/Methods")
from Methods import _topLevel
class topLevel(customtkinter.CTkToplevel, _topLevel.Mixin):
def __init__(self, parent):
super().__init__(parent)
# Create Variable
global fileSep
fileSep = customtkinter.StringVar(value="Comma")
print("Inside Class: " fileSep.get()) # Works
# Create Button
self.loadButton = customtkinter.CTkButton(master=self,
text="Load",
command=self.loadFile)
self.loadButton.grid(row=0, column = 0, sticky='nswe')
# Attempt to access variable
def access_method(self):
print("Access Method: " self.fileSep.get())
_topLevel.py 包含 mixin 類:
# _topLevel.py
class Mixin:
def loadFile(self):
# Trying to access fileSep variable
print("Inside Mixin: " fileSep.get()) # Error
topLevel().access_method() # Error
# I'm trying to access this variable from a function in main.py
var = "Hello World"
我收到以下錯誤,因為變數不可訪問。
NameError: name 'var' is not defined
NameError: name 'fileSep' is not defined
我嘗試使變數全域化以及在類( access_method() )中創建方法來列印此處描述的變數https://www.geeksforgeeks.org/python-using-variable-outside-and-inside-the -class-and-method/,但得到錯誤:
TypeError: __init__() missing 1 required positional argument: 'parent'
如何訪問在 Mixin 類中的類中定義的變數?如何訪問由 Mixin 類中的 loadFile 函式創建的變數,以便在 App 類中的方法中使用?
uj5u.com熱心網友回復:
感謝@acw1668 評論,我只需要將 fileSep 設為實體變數:
self.fileSep = customtkinter.StringVar(value="Comma")
并在 mixin 類中訪問它:
print("Inside Mixin: " self.fileSep.get())
同樣,我可以創建一個實體變數來分配變數 var 。例如在我添加的 topLevel 類中:
self.a = ""
然后將 var 分配給函式內的這個變數:
var = "Hello World"
self.a = var
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/495866.html
