【问题标题】:Python tkinter, missing positional argument errorPython tkinter,缺少位置参数错误
【发布时间】:2021-12-27 13:37:53
【问题描述】:

我正在尝试使用 Tkinter 开发一个简单的 python 工具。我创建了 3 个文件,下面是代码。这些文件是 图形用户界面.py

from tkinter import *
from tkinter.messagebox import *
import tkinter.ttk as ttk
import versionTab
import logclass

class GUI(Tk):
    def __init__(self, parent):
        self.parent = parent
        parent.title("Tool")
        parent.geometry('695x600+100+100')
        self.frame = Frame(parent,bd=5).grid()
        self.infoLabel = LabelFrame(self.frame,text="Information",height=100,width=100)
        self.version = versionTab.versionTab(self.infoLabel)
        self.infoLabel.grid(row=1,column=0,columnspan =2,padx=8,pady=2,sticky = W)

        self.logLabel = LabelFrame(self.frame,height=1000,width=1000)
        self.Log = logclass.debuglog(self.logLabel)
        self.logLabel.grid(row=4,column=0,columnspan =2,padx=8,pady=2,sticky = W)

root = Tk()
gui = GUI(root)
root.resizable(0,0)
root.mainloop()

下一个文件是versionTab.py

from tkinter import *
from tkinter.messagebox import *
import logclass

class versionTab():
    def __init__(self,frame):
        self.firmwareFrame =LabelFrame(frame,height=15,width=100)
        self.firmwareversion_B = Button(self.firmwareFrame, text=" Version",command= self.getFW).grid(row=0,column=0,padx=2,pady=5)
        self.versionText_Entry = Entry(self.firmwareFrame,width=10)
        self.versionText_Entry.configure(state ='readonly')
        self.versionText_Entry.grid(row=0,column=1,padx=4,pady=5)
        self.firmwareFrame.grid(row=1,column=0,columnspan =2,padx=2,pady=2,sticky = W)

    def getFW(self):
        logclass.debuglog.logst(self,"12344")

最终文件是 logclass.py

from tkinter import *
import tkinter.ttk as ttk
from datetime import datetime

class debuglog():
    def __init__(self,frame):
        self.debuglog = LabelFrame(frame,text = "Log",height=15,width=100)
        self.log      = Text(self.debuglog,height = 20, width = 80)
        self.scrollb  = Scrollbar(self.debuglog, orient=VERTICAL)
        self.scrollb.config(command = self.log.yview) 
        self.log.config(yscrollcommand = self.scrollb.set)
        self.log.grid(column=0, row=0)
        self.scrollb.grid(column=1, row=0, sticky=W)
        self.debuglog.pack()

    def logst(self,msg, level=None):
        print('logclass')
        self.log.insert(insert('end', msg + '\n'))

    def exitWindow(self):

        print('exit..')

当我运行我的 GUI.py 文件时,我能够生成该工具。该工具将显示一个简单的按钮版本。当我单击工具上的版本按钮时,它会引发以下错误

versionTab.py", line 15, in getFW
    logclass.debuglog.logst(self)
TypeError: logst() missing 1 required positional argument: 'msg'

谁能告诉我为什么我无法从我的 versiontab 文件中调用日志

【问题讨论】:

  • 错误回溯中的行与versionTab.py 的发布代码不匹配。

标签: python python-3.x tkinter


【解决方案1】:

您似乎试图在类 debuglog 上调用方法 logst。这不起作用,因为“logst”不是静态方法。您需要创建一个debuglog 的实例才能在其上调用logst 方法。

我也不明白你为什么在调用 self 时将它传递给 logst 函数

versionTab 类的构造函数中,您可以添加self._logger = logclass.debuglog(),然后调用self._logger.logst 而不是logclass.debuglog.logst

也许看看静态方法和非静态方法的区别?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-20
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多