鱼C论坛

 找回密码
 立即注册
查看: 1742|回复: 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
#引入需要的库
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)           get() 得到的本来就是字符串
    def dete():                         # 不要关键字参数
        # keyword=dele3                改成 keyword=dele1.get()
        keyword=dele1.get()
        result = []                          # 加个 result = []
        for index,item in enumerate(songs):
                    if songs[index].song!=keyword:               # == 改成 !=
                        # x=index 不要
                        result.append(songs[index])              # 使用 result 列表存放删除后的结果
        # del songs[x]                                       这一行不要
        file=open(filename,'w+',encoding='utf-8')
        for item in result:                                   # songs 改成 result
            file.write(str(item.song)+"  "+str(item.singer)
                       +"  "+str(item.time)+'\n')
        file.close()
    btn1=tk.Button(dele,text="确定删除",
                   command=dete)       # 这里不要 (),() 是调用的得到函数返回值,command 传入函数名即可
    btn1.grid(row=2,column=1)
    btn2=tk.Button(dele,text="结束",
                   command=dele.destroy)          # 这里应该是关闭删除界面,改成 dele.destroy
    btn2.grid(row=4,column=2)
    dele.mainloop()
menu()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-13 18:12:25 | 显示全部楼层
确实乱。
这样试试
def dete(keyword=''):
    keyword=dele3
    for index,item in enumerate(songs):
        if songs[index].song==keyword:
            x=index
            break
    del songs[x]
    
    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')
btn1=tk.Button(dele,text="确定删除",
                   command=dete)
想知道小甲鱼最近在做啥?请访问 -> 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
还是报错
想知道小甲鱼最近在做啥?请访问 -> 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
还是报 ...
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')
想知道小甲鱼最近在做啥?请访问 -> 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()

是要这样改吗,我还是删除不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

把代码打包上传,截图问题 所在。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-13 21:57:47 | 显示全部楼层    本楼为最佳答案   
#引入需要的库
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)           get() 得到的本来就是字符串
    def dete():                         # 不要关键字参数
        # keyword=dele3                改成 keyword=dele1.get()
        keyword=dele1.get()
        result = []                          # 加个 result = []
        for index,item in enumerate(songs):
                    if songs[index].song!=keyword:               # == 改成 !=
                        # x=index 不要
                        result.append(songs[index])              # 使用 result 列表存放删除后的结果
        # del songs[x]                                       这一行不要
        file=open(filename,'w+',encoding='utf-8')
        for item in result:                                   # songs 改成 result
            file.write(str(item.song)+"  "+str(item.singer)
                       +"  "+str(item.time)+'\n')
        file.close()
    btn1=tk.Button(dele,text="确定删除",
                   command=dete)       # 这里不要 (),() 是调用的得到函数返回值,command 传入函数名即可
    btn1.grid(row=2,column=1)
    btn2=tk.Button(dele,text="结束",
                   command=dele.destroy)          # 这里应该是关闭删除界面,改成 dele.destroy
    btn2.grid(row=4,column=2)
    dele.mainloop()
menu()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

成功了!!谢谢你!!!!!!!!!!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不客气,给个最佳答案呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 18:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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