python - 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() ```
解决方案
据我了解,我相信你想要这样的东西(我写这个小例子只是为了展示一种可能的方法)
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()
推荐阅读
- verilog - Verilog:if语句和case语句之间的区别
- java - JavaFX Canvas fillPolygon 方法不会创建平滑表面(网格线可见)
- amazon-eks - 创建 EKS 集群但出现密钥对错误
- sql-server - 如何将 SQCLR 程序中的日志写入 Elastic?
- java - 通过数组中的某些索引打印值
- javascript - 查询单列而不是对象数组时返回值数组
- java - 结果屏幕上缺少值
- android - Android Studio 4.2.2 使用了近 250mb 的互联网数据来创建新项目
- css - 更改元素顺序 CSS - 奇怪的情况
- node.js - 我打开此书签时未定义书签