鱼C论坛

 找回密码
 立即注册
查看: 1901|回复: 9

[已解决]python小白求助

[复制链接]
发表于 2022-4-13 17:41:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#引入需要的库
from tkinter import *
from unicodedata import name
import tkinter as tk
import os
import tkinter.messagebox as messagebox
#定义大类
class SongInformation:
    def __init__(self, song,singer,time):
        self.song=song
        self.singer=singer
        self.time=time
songs=[]
filename="song.txt"
file=open(filename,'r',encoding='utf-8')
if  file:
    line=file.readline()
    while line!='':
        list1=line.split()
        if list1:
            string1=list1[0]
            if string1=='':
                continue
            if string1!='':
                string2=list1[1]
                string3=list1[2]
                songs.append(SongInformation(string1,string2,string3))
        line=file.readline()   
file.close()
#制作主页并制作跳转功能
def menu():
    top=tk.Tk()
    top.title("歌曲信息管理系统")
    top.geometry('280x280')
    btn1=tk.Button(top,text="录入歌曲信息",
                   command=lambda:[top.quit,insert()])
    btn2=tk.Button(top,text="删除歌曲信息",
                   command=lambda:[top.quit,dele()])
    btn3=tk.Button(top,text="根据歌手分组",
                   command=lambda:[top.quit,singer()])
    btn4=tk.Button(top,text="浏览歌曲信息",
                   command=lambda:[top.quit,browse()])
    btn5=tk.Button(top,text="查询歌曲信息",
                   command=lambda:[top.quit,search()])
    btn6=tk.Button(top,text="退出管理系统",
                   command=top.destroy)
    btn1.pack()
    btn2.pack()
    btn3.pack()
    btn4.pack()
    btn5.pack()
    btn6.pack()
    top.mainloop()   
#跳转界面
#录入界面设置
def insert():
    insert=tk.Tk()
    insert.title('录入歌曲界面')  

    label1=tk.Label(insert,text="输入歌曲名称:")
    label1.grid(row=1,column=1)
    song1=tk.StringVar()
    song2=tk.Entry(insert,textvariable=song1)
    song2.grid(row=1,column=2)

    label2=tk.Label(insert,text="输入歌手名称:")
    label2.grid(row=2,column=1)
    singer1=tk.StringVar()
    singer2=tk.Entry(insert,textvariable=singer1)
    singer2.grid(row=2,column=2)

    label3=tk.Label(insert,text="输入发行年月:")
    label3.grid(row=3,column=1)
    time1=tk.StringVar()
    time2=tk.Entry(insert,textvariable=time1)
    time2.grid(row=3,column=2)
    def insert1():
        song=song2.get()
        a=str(song)
        singer=singer2.get()
        b=str(singer)
        time=time2.get()
        c=str(time)
        songs.append(SongInformation(a,b,c))
        if len(a)!=0 and len(b)!=0 and len(c)!=0:
            with open('song.txt', 'a',encoding='utf-8') as f:
                for item in songs:
                    f.write(str(item.song)+" "+str(item.singer)
                            +" "+str(item.time)+'\n')
            insuc()
        else:
            warn=tk.Tk()
            warn.title("错误")
            label1=tk.Label(warn,text="请重新输入!")
            label1.pack()
            warn.mainloop()

    btn1=tk.Button(insert,text="录入",
                   command=insert1)
    btn1.grid(row=4,column=1)
    btn2=tk.Button(insert,text="结束",
                   command=insert.destroy)
    btn2.grid(row=4,column=2)
    insert.mainloop()

#录入成功的弹窗
def insuc():
    insuc=tk.Tk()
    insuc.title('录入成功')
    label1=tk.Label(insuc,text="录入成功!")
    label1.pack()
    insuc.mainloop()
#删除歌曲界面
def dele():
    dele=tk.Tk()
    dele.title('删除歌曲界面')
    label1=tk.Label(dele,text='输入要删除的歌曲名称:')
    label1.grid(row=1,column=1)
    dele1=tk.StringVar()
    dele1=tk.Entry(dele,textvariable=dele1)
    dele1.grid(row=1,column=2)
    dele2=dele1.get()
    dele3=str(dele2)
    def dete(keyword):
        keyword=dele3
        for index,item in enumerate(songs):
                    if songs[index].song==keyword:
                        x=index
        del songs[x]
        file=open(filename,'w+',encoding='utf-8')
        for item in songs:
            file.write(str(item.song)+"  "+str(item.singer)
                       +"  "+str(item.time)+'\n')
        file.close()
    btn1=tk.Button(dele,text="确定删除",
                   command=dete())
    btn1.grid(row=2,column=1)
    btn2=tk.Button(dele,text="结束",
                   command=insert.destroy)
    btn2.grid(row=4,column=2)
    dele.mainloop()

这个是歌曲管理系统的一部分程序,删除歌曲这个要么是出错要么删不了,不知道该怎么继续做了(我知道自己写的很乱..
最佳答案
2022-4-13 21:57:47
  1. #引入需要的库
  2. from tkinter import *
  3. from unicodedata import name
  4. import tkinter as tk
  5. import os
  6. import tkinter.messagebox as messagebox
  7. #定义大类
  8. class SongInformation:
  9.     def __init__(self, song,singer,time):
  10.         self.song=song
  11.         self.singer=singer
  12.         self.time=time
  13. songs=[]
  14. filename="song.txt"
  15. file=open(filename,'r',encoding='utf-8')
  16. if  file:
  17.     line=file.readline()
  18.     while line!='':
  19.         list1=line.split()
  20.         if list1:
  21.             string1=list1[0]
  22.             if string1=='':
  23.                 continue
  24.             if string1!='':
  25.                 string2=list1[1]
  26.                 string3=list1[2]
  27.                 songs.append(SongInformation(string1,string2,string3))
  28.         line=file.readline()   
  29. file.close()
  30. #制作主页并制作跳转功能
  31. def menu():
  32.     top=tk.Tk()
  33.     top.title("歌曲信息管理系统")
  34.     top.geometry('280x280')
  35.     btn1=tk.Button(top,text="录入歌曲信息",
  36.                    command=lambda:[top.quit,insert()])
  37.     btn2=tk.Button(top,text="删除歌曲信息",
  38.                    command=lambda:[top.quit,dele()])
  39.     btn3=tk.Button(top,text="根据歌手分组",
  40.                    command=lambda:[top.quit,singer()])
  41.     btn4=tk.Button(top,text="浏览歌曲信息",
  42.                    command=lambda:[top.quit,browse()])
  43.     btn5=tk.Button(top,text="查询歌曲信息",
  44.                    command=lambda:[top.quit,search()])
  45.     btn6=tk.Button(top,text="退出管理系统",
  46.                    command=top.destroy)
  47.     btn1.pack()
  48.     btn2.pack()
  49.     btn3.pack()
  50.     btn4.pack()
  51.     btn5.pack()
  52.     btn6.pack()
  53.     top.mainloop()   
  54. #跳转界面
  55. #录入界面设置
  56. def insert():
  57.     insert=tk.Tk()
  58.     insert.title('录入歌曲界面')  

  59.     label1=tk.Label(insert,text="输入歌曲名称:")
  60.     label1.grid(row=1,column=1)
  61.     song1=tk.StringVar()
  62.     song2=tk.Entry(insert,textvariable=song1)
  63.     song2.grid(row=1,column=2)

  64.     label2=tk.Label(insert,text="输入歌手名称:")
  65.     label2.grid(row=2,column=1)
  66.     singer1=tk.StringVar()
  67.     singer2=tk.Entry(insert,textvariable=singer1)
  68.     singer2.grid(row=2,column=2)

  69.     label3=tk.Label(insert,text="输入发行年月:")
  70.     label3.grid(row=3,column=1)
  71.     time1=tk.StringVar()
  72.     time2=tk.Entry(insert,textvariable=time1)
  73.     time2.grid(row=3,column=2)
  74.     def insert1():
  75.         song=song2.get()
  76.         a=str(song)
  77.         singer=singer2.get()
  78.         b=str(singer)
  79.         time=time2.get()
  80.         c=str(time)
  81.         songs.append(SongInformation(a,b,c))
  82.         if len(a)!=0 and len(b)!=0 and len(c)!=0:
  83.             with open('song.txt', 'a',encoding='utf-8') as f:
  84.                 for item in songs:
  85.                     f.write(str(item.song)+" "+str(item.singer)
  86.                             +" "+str(item.time)+'\n')
  87.             insuc()
  88.         else:
  89.             warn=tk.Tk()
  90.             warn.title("错误")
  91.             label1=tk.Label(warn,text="请重新输入!")
  92.             label1.pack()
  93.             warn.mainloop()

  94.     btn1=tk.Button(insert,text="录入",
  95.                    command=insert1)
  96.     btn1.grid(row=4,column=1)
  97.     btn2=tk.Button(insert,text="结束",
  98.                    command=insert.destroy)
  99.     btn2.grid(row=4,column=2)
  100.     insert.mainloop()

  101. #录入成功的弹窗
  102. def insuc():
  103.     insuc=tk.Tk()
  104.     insuc.title('录入成功')
  105.     label1=tk.Label(insuc,text="录入成功!")
  106.     label1.pack()
  107.     insuc.mainloop()
  108. #删除歌曲界面
  109. def dele():
  110.     dele=tk.Tk()
  111.     dele.title('删除歌曲界面')
  112.     label1=tk.Label(dele,text='输入要删除的歌曲名称:')
  113.     label1.grid(row=1,column=1)
  114.     dele1=tk.StringVar()                                 
  115.     dele1=tk.Entry(dele,textvariable=dele1)
  116.     dele1.grid(row=1,column=2)
  117.     # dele2=dele1.get()          应该是点击删除的时候才获取文本
  118.     # dele3=str(dele2)           get() 得到的本来就是字符串
  119.     def dete():                         # 不要关键字参数
  120.         # keyword=dele3                改成 keyword=dele1.get()
  121.         keyword=dele1.get()
  122.         result = []                          # 加个 result = []
  123.         for index,item in enumerate(songs):
  124.                     if songs[index].song!=keyword:               # == 改成 !=
  125.                         # x=index 不要
  126.                         result.append(songs[index])              # 使用 result 列表存放删除后的结果
  127.         # del songs[x]                                       这一行不要
  128.         file=open(filename,'w+',encoding='utf-8')
  129.         for item in result:                                   # songs 改成 result
  130.             file.write(str(item.song)+"  "+str(item.singer)
  131.                        +"  "+str(item.time)+'\n')
  132.         file.close()
  133.     btn1=tk.Button(dele,text="确定删除",
  134.                    command=dete)       # 这里不要 (),() 是调用的得到函数返回值,command 传入函数名即可
  135.     btn1.grid(row=2,column=1)
  136.     btn2=tk.Button(dele,text="结束",
  137.                    command=dele.destroy)          # 这里应该是关闭删除界面,改成 dele.destroy
  138.     btn2.grid(row=4,column=2)
  139.     dele.mainloop()
  140. menu()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-4-13 18:12:25 | 显示全部楼层
确实乱。
这样试试
  1. def dete(keyword=''):
  2.     keyword=dele3
  3.     for index,item in enumerate(songs):
  4.         if songs[index].song==keyword:
  5.             x=index
  6.             break
  7.     del songs[x]
  8.    
  9.     with open(filename,'w+',encoding='utf-8') as f:
  10.         for item in songs:
  11.             f.write(str(item.song)+"  "+str(item.singer)
  12.                        +"  "+str(item.time)+'\n')
复制代码

  1. btn1=tk.Button(dele,text="确定删除",
  2.                    command=dete)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-13 18:50:38 | 显示全部楼层
ba21 发表于 2022-4-13 18:12
确实乱。
这样试试

in dete  del songs[x]
UnboundLocalError: local variable 'x' referenced before assignment
还是报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-13 20:20:40 | 显示全部楼层
UNLsian 发表于 2022-4-13 18:50
in dete  del songs[x]
UnboundLocalError: local variable 'x' referenced before assignment
还是报 ...
  1. def dete(keyword=''):
  2.     keyword=dele3
  3.     for index,item in enumerate(songs[:]):
  4.         if songs[index].song==keyword:
  5.             del songs[x]
  6.             break
  7.    
  8.    
  9.     with open(filename,'w+',encoding='utf-8') as f:
  10.         for item in songs:
  11.             f.write(str(item.song)+"  "+str(item.singer)
  12.                        +"  "+str(item.time)+'\n')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-13 20:50:22 | 显示全部楼层
def dele():
    dele=tk.Tk()
    dele.title('删除歌曲界面')
    label1=tk.Label(dele,text='输入要删除的歌曲名称:')
    label1.grid(row=1,column=1)
    dele1=tk.StringVar()
    dele2=tk.Entry(dele,textvariable=dele1)
    dele2.grid(row=1,column=2)
    dele2=dele1.get()
    dele3=str(dele2)
    def dete(keyword=''):
        keyword=dele3
        for index,item in enumerate(songs[:]):
            if songs[index].song==keyword:
                del songs[x]
                break

        with open(filename,'w+',encoding='utf-8') as f:
            for item in songs:
                f.write(str(item.song)+" "+str(item.singer)
                        +" "+str(item.time)+'\n')
        desuc()
    btn1=tk.Button(dele,text="确定删除",
                   command=dete)
    btn1.grid(row=2,column=1)
    btn2=tk.Button(dele,text="结束",
                   command=dele.destroy)
    btn2.grid(row=2,column=2)
    dele.mainloop()

是要这样改吗,我还是删除不了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-13 21:09:20 | 显示全部楼层
UNLsian 发表于 2022-4-13 20:50
是要这样改吗,我还是删除不了

把代码打包上传,截图问题 所在。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-13 21:22:15 | 显示全部楼层
ba21 发表于 2022-4-13 21:09
把代码打包上传,截图问题 所在。

https://pan.baidu.com/s/1-_r-YFw7r7rVyaMHDOK20w?pwd=wc88

                               
登录/注册后可看大图
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-13 21:57:47 | 显示全部楼层    本楼为最佳答案   
  1. #引入需要的库
  2. from tkinter import *
  3. from unicodedata import name
  4. import tkinter as tk
  5. import os
  6. import tkinter.messagebox as messagebox
  7. #定义大类
  8. class SongInformation:
  9.     def __init__(self, song,singer,time):
  10.         self.song=song
  11.         self.singer=singer
  12.         self.time=time
  13. songs=[]
  14. filename="song.txt"
  15. file=open(filename,'r',encoding='utf-8')
  16. if  file:
  17.     line=file.readline()
  18.     while line!='':
  19.         list1=line.split()
  20.         if list1:
  21.             string1=list1[0]
  22.             if string1=='':
  23.                 continue
  24.             if string1!='':
  25.                 string2=list1[1]
  26.                 string3=list1[2]
  27.                 songs.append(SongInformation(string1,string2,string3))
  28.         line=file.readline()   
  29. file.close()
  30. #制作主页并制作跳转功能
  31. def menu():
  32.     top=tk.Tk()
  33.     top.title("歌曲信息管理系统")
  34.     top.geometry('280x280')
  35.     btn1=tk.Button(top,text="录入歌曲信息",
  36.                    command=lambda:[top.quit,insert()])
  37.     btn2=tk.Button(top,text="删除歌曲信息",
  38.                    command=lambda:[top.quit,dele()])
  39.     btn3=tk.Button(top,text="根据歌手分组",
  40.                    command=lambda:[top.quit,singer()])
  41.     btn4=tk.Button(top,text="浏览歌曲信息",
  42.                    command=lambda:[top.quit,browse()])
  43.     btn5=tk.Button(top,text="查询歌曲信息",
  44.                    command=lambda:[top.quit,search()])
  45.     btn6=tk.Button(top,text="退出管理系统",
  46.                    command=top.destroy)
  47.     btn1.pack()
  48.     btn2.pack()
  49.     btn3.pack()
  50.     btn4.pack()
  51.     btn5.pack()
  52.     btn6.pack()
  53.     top.mainloop()   
  54. #跳转界面
  55. #录入界面设置
  56. def insert():
  57.     insert=tk.Tk()
  58.     insert.title('录入歌曲界面')  

  59.     label1=tk.Label(insert,text="输入歌曲名称:")
  60.     label1.grid(row=1,column=1)
  61.     song1=tk.StringVar()
  62.     song2=tk.Entry(insert,textvariable=song1)
  63.     song2.grid(row=1,column=2)

  64.     label2=tk.Label(insert,text="输入歌手名称:")
  65.     label2.grid(row=2,column=1)
  66.     singer1=tk.StringVar()
  67.     singer2=tk.Entry(insert,textvariable=singer1)
  68.     singer2.grid(row=2,column=2)

  69.     label3=tk.Label(insert,text="输入发行年月:")
  70.     label3.grid(row=3,column=1)
  71.     time1=tk.StringVar()
  72.     time2=tk.Entry(insert,textvariable=time1)
  73.     time2.grid(row=3,column=2)
  74.     def insert1():
  75.         song=song2.get()
  76.         a=str(song)
  77.         singer=singer2.get()
  78.         b=str(singer)
  79.         time=time2.get()
  80.         c=str(time)
  81.         songs.append(SongInformation(a,b,c))
  82.         if len(a)!=0 and len(b)!=0 and len(c)!=0:
  83.             with open('song.txt', 'a',encoding='utf-8') as f:
  84.                 for item in songs:
  85.                     f.write(str(item.song)+" "+str(item.singer)
  86.                             +" "+str(item.time)+'\n')
  87.             insuc()
  88.         else:
  89.             warn=tk.Tk()
  90.             warn.title("错误")
  91.             label1=tk.Label(warn,text="请重新输入!")
  92.             label1.pack()
  93.             warn.mainloop()

  94.     btn1=tk.Button(insert,text="录入",
  95.                    command=insert1)
  96.     btn1.grid(row=4,column=1)
  97.     btn2=tk.Button(insert,text="结束",
  98.                    command=insert.destroy)
  99.     btn2.grid(row=4,column=2)
  100.     insert.mainloop()

  101. #录入成功的弹窗
  102. def insuc():
  103.     insuc=tk.Tk()
  104.     insuc.title('录入成功')
  105.     label1=tk.Label(insuc,text="录入成功!")
  106.     label1.pack()
  107.     insuc.mainloop()
  108. #删除歌曲界面
  109. def dele():
  110.     dele=tk.Tk()
  111.     dele.title('删除歌曲界面')
  112.     label1=tk.Label(dele,text='输入要删除的歌曲名称:')
  113.     label1.grid(row=1,column=1)
  114.     dele1=tk.StringVar()                                 
  115.     dele1=tk.Entry(dele,textvariable=dele1)
  116.     dele1.grid(row=1,column=2)
  117.     # dele2=dele1.get()          应该是点击删除的时候才获取文本
  118.     # dele3=str(dele2)           get() 得到的本来就是字符串
  119.     def dete():                         # 不要关键字参数
  120.         # keyword=dele3                改成 keyword=dele1.get()
  121.         keyword=dele1.get()
  122.         result = []                          # 加个 result = []
  123.         for index,item in enumerate(songs):
  124.                     if songs[index].song!=keyword:               # == 改成 !=
  125.                         # x=index 不要
  126.                         result.append(songs[index])              # 使用 result 列表存放删除后的结果
  127.         # del songs[x]                                       这一行不要
  128.         file=open(filename,'w+',encoding='utf-8')
  129.         for item in result:                                   # songs 改成 result
  130.             file.write(str(item.song)+"  "+str(item.singer)
  131.                        +"  "+str(item.time)+'\n')
  132.         file.close()
  133.     btn1=tk.Button(dele,text="确定删除",
  134.                    command=dete)       # 这里不要 (),() 是调用的得到函数返回值,command 传入函数名即可
  135.     btn1.grid(row=2,column=1)
  136.     btn2=tk.Button(dele,text="结束",
  137.                    command=dele.destroy)          # 这里应该是关闭删除界面,改成 dele.destroy
  138.     btn2.grid(row=4,column=2)
  139.     dele.mainloop()
  140. menu()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-13 22:05:39 | 显示全部楼层

成功了!!谢谢你!!!!!!!!!!!!!!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-13 22:07:16 | 显示全部楼层
UNLsian 发表于 2022-4-13 22:05
成功了!!谢谢你!!!!!!!!!!!!!!!!

不客气,给个最佳答案呗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-29 06:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表