首页 > 解决方案 > tkinter 中的文件系统(请参阅、编辑、删除)

问题描述

我想在 tkinter 创建一些应用程序,该应用程序是食物组织者,我无法将文件连接到 def(function) 并在那里控制它们。我的意思是我想控制选项:编辑、删除、阅读、创建。我知道我需要对功能和“命令”做一些事情,但有一个问题。

from tkinter import *
import os
import files
from PIL import ImageTk , Image

def editfiles():
    filewin1=Toplevel(root)
    label= Label(filewin1, font=("ariel") , text="Choose order",fg="blue")
    label.pack()
    button=Button(filewin1, text="start edit")
    button.pack(side=LEFT)
    filewin1.wm_geometry("400x400")
    chk_state = BooleanVar()
    chk_state.set(True)
    chk = Checkbutton(filewin1, text='File1', var=chk_state)
    chk.pack(side=LEFT)

def create():
    filewin2=Toplevel(root)
    button = Button(filewin2 , font=("algerian") , text="create new order", bg="gray")
    button.pack()
    filewin2.wm_geometry("400x400")

def donothing():
    filewin = Toplevel(root)
    button = Button(filewin, text="Do nothing button")
    button.pack()
    filewin.wm_geometry("400x400")

def remove():
    filewin3 = Toplevel(root)
    label= Label(filewin3, font=("ariel") , text="Choose order",fg="red")
    label.pack()
    button = Button(filewin3, text="remove")
    button.pack(side=LEFT)
    filewin3.wm_geometry("400x400")
    chk_state = BooleanVar()
    chk_state.set(True)
    chk = Checkbutton(filewin3, text='File1', var=chk_state)
    chk.pack(side=LEFT)

def just_see():
    filewin5=Toplevel(root)
    label=Label(filewin5, text="Orders list",font=("algerian"),fg="green")
    label.pack()
    button = Button(filewin5, text="Detiles")
    button.pack(side=LEFT)
    filewin5.wm_geometry("400x400")
    chk_state = BooleanVar()
    chk_state.set(True)
    chk = Checkbutton(filewin5, text='File1', var=chk_state)
    chk.pack(side=LEFT)


root = Tk()
root.title("F-order system Ltd")
root.wm_geometry("480x480")
menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="All orders", command=just_see)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="File", menu=filemenu)
editmenu = Menu(menubar, tearoff=0)

editmenu.add_separator()

editmenu.add_command(label="New order", command=create)
editmenu.add_command(label="Edit order", command=editfiles)
editmenu.add_command(label="Remove order", command=remove)


menubar.add_cascade(label="Edit", menu=editmenu)
root.config(menu=menubar)
C = Canvas(root, bg="blue", height=250, width=300)
filename = PhotoImage(file = 'C:\\Users\\PycharmProjects\\pythonProject1\\app.png')
background_label = Label(root, image=filename)
background_label.place(x=0, y=0, relwidth=1, relheight=1)
lblnum=Label(root, font=("david"), text="Food organizer" , height=1)
lblnum.pack()
root.iconphoto(False, PhotoImage(file= 'C:\\Users\\PycharmProjects\\pythonProject1\\icon.png'))
root.mainloop() ```

标签: pythontkinter

解决方案


据我了解,我相信你想要这样的东西(我写这个小例子只是为了展示一种可能的方法)

from tkinter import *
import os

class App:
    def __init__(self):
        self.root=Tk()
        self.dir='sample'
        head_label=Label(self.root,text='Files')
        head_label.pack()
        self.listbox=Listbox(self.root)
        self.listbox.pack()
        for file in os.listdir(self.dir):
            self.listbox.insert(END,file.split('.')[0])
        new_button=Button(self.root,text='new',command=self.new)
        new_button.pack(side='left')
        edit_button=Button(self.root,text='edit',command=self.edit)
        edit_button.pack(side='left')
        edit_button=Button(self.root,text='remove',command=self.remove)
        edit_button.pack(side='left')
        self.root.mainloop()

    def _popup(self):
        def on_submit():
            self.val=entry.get()
            pop.destroy()
        self.val=None
        pop=Toplevel(self.root)
        desc_label=Label(pop,text='Enter the value')
        desc_label.pack()
        entry=Entry(pop)
        entry.pack()
        sub_button=Button(pop,text='Submit',command=on_submit)
        sub_button.pack()
        self.root.wait_window(pop)
        return self.val

    def edit(self):
        file=self.listbox.get(self.listbox.curselection())
        os.system(os.path.join(self.dir,f'{file}.txt'))

    def remove(self):
        file=self.listbox.get(self.listbox.curselection())
        os.remove(os.path.join(self.dir,f'{file}.txt'))
        self.listbox.delete(self.listbox.get(0,END).index(file))

    def new(self):
        self._popup()
        self.filename=os.path.join(self.dir,f'{self.val}.txt')
        if self.val:
            with open(self.filename,'w+') as file:
                file.write('')
                file.close()
        self.listbox.insert(END,self.val)

if __name__=='__main__':
    App()

推荐阅读