【问题标题】:Python Tkinter GUI application queryPython Tkinter GUI 应用程序查询
【发布时间】:2021-07-24 07:12:40
【问题描述】:

我已经构建了一个 Python tkinter GUI 应用程序,它是一个用于运行不同任务的应用程序。应用程序窗口水平分为两半,前半部分显示用户可以为所选菜单选项选择的选项,后半部分通过显示日志消息显示任务的进度。每个任务都有一个单独的菜单选项,用户选择菜单选项,前半部分会刷新用户选项以及提交按钮。

GUI 是使用面向对象的方法构建的,其中菜单选项中的每个任务都是 GUI 对象的类方法。 我现在有大约 5-6 个菜单选项并且工作正常,但是代码量变得很大,并且很难调试任何问题或添加新功能。

有没有办法将类的方法写在单独的文件中,可以从主类中调用。 GUI 中的消息记录是写在主类中的,所以如果方法写在一个单独的文件中,那么写在另一个文件中的日志消息将如何显示在主窗口中。

请提出替代方案。

【问题讨论】:

  • 您应该使用标准的import 从其他文件加载代码。所有 Python 程序都以这种方式工作。即使tkinter 也是这样工作的。至于日志记录 - 你没有显示代码,所以我们不能说如何修复它。也许您应该将其放在单独的文件中并导入到所有其他文件中,或者您应该将其作为参数发送到其他文件/类。

标签: python user-interface tkinter


【解决方案1】:

这可能无法完全帮助您,但这是我使用的。我将我的 tkinter 代码分成 2 个文件。第一个gui.py 包含GUI 组件(小部件),第二个methods.py 包含方法。 这两个文件应该在同一个目录中。

这是一个简单的应用程序示例,该应用程序在单击按钮时更改标签。方法change() 存储在不同的文件中。

gui.py

from tkinter import *
from tkinter import ttk
from methods import change   #Using absolute import instead of wildcard imports

class ClassNameGoesHere:
    
  def __init__(self,app):

    self.testbtn = ttk.Button(app,text="Test",command = lambda: change(self))
     #calling the change method.
    self.testbtn.grid(row=0,column=0,padx=10,pady=10)

    self.testlabel = ttk.Label(app,text="Before Button Click")
    self.testlabel.grid(row=1,column=0,padx=10,pady=10)

def main():
  root = Tk()
  root.title("Title Goes Here")
  obj = ClassNameGoesHere(root)
  root.mainloop()
  
if __name__ == "__main__":
  main()

methods.py

from tkinter import *
from tkinter import ttk

def change(self):
    self.testlabel.config(text="After Button Click")

【讨论】:

  • 这样的话,很容易和名字发生冲突。
  • @Atlas435 你能详细说明一下吗?这将帮助我编写更好的代码。
  • espacilly 在这种情况下,现在采用名称 change。假设您对 methods4object2.py 之类的不同文件执行完全相同的操作,并具有另一个名为 change 的函数。在这种情况下,函数 change 成为它绑定的最后一个函数。所以通配符导入并不理想,最好使用absolute imports。另一个good answers
  • @Atlas435 谢谢。我会记住这一点。
猜你喜欢
  • 2021-03-04
  • 2012-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多