gpt4 book ai didi

python - 如何打开另一个窗口并从中获取数据,然后保存到文件?

转载 作者:行者123 更新时间:2023-12-01 05:45:05 25 4
gpt4 key购买 nike

我正在尝试使用 tkinter 在 python 中创建一个程序,该程序应该有用户创建的书籍列表。在主窗口(带有列表的窗口)上,应该有一个菜单栏,其中包含将书籍添加到列表中的选项。单击时,此选项应打开另一个窗口,这次有一个输入框,用户应在其中输入书名和添加按钮,以将该按钮添加到列表中。

该列表保存在 .txt 文件中。

这是我到目前为止编写的程序:

import sys
from tkinter import *

def newBook():
def add():
BookTitle = v.get()
bookTitle = '\n' + BookTitle
books = open('c:/digitalLibrary/books.txt', 'a')
books.write(bookTitle)
books.close()

addWindow = Tk()
v = StringVar()

addWindow.geometry('250x40+500+100')

addWindow.title('digitalLibrary - Add Book')

newBookEntry = Entry(addWindow,textvariable=v)
newBookEntry.pack()

addButton = Button(addWindow, text='ADD', command=add)
addButton.pack()

def refresh():
books = open('c:/digitalLibrary/books.txt', 'r')
bookList = books.readlines()
books.close()

for i in range (0, len(bookList)):
bookOne = Label(text=bookList[i])
bookOne.grid(row=i, column=0, sticky=W)

def quitProgram():
tfQuit = messagebox.askyesno(title='Close Program', message='Are you sure?')
if tfQuit:
window.destroy()

window = Tk()
menubar = Menu(window)

window.geometry('400x400+200+100')

window.title('digitalLibrary')

booksmenu = Menu(menubar, tearoff=0)
booksmenu.add_command(label='Add Book', command=newBook)
booksmenu.add_command(label='Delete Book')
booksmenu.add_command(label='Close Program', command=quitProgram)
menubar.add_cascade(label='digitalLibrary', menu=booksmenu)

books = open('c:/digitalLibrary/books.txt', 'r')
bookList = books.readlines()
books.close()

for i in range (0, len(bookList)):
bookOne = Label(window, text=bookList[i])
bookOne.grid(row=i, column=0, sticky=W)


refreshButton = Button(window, text='Refresh', command=refresh)
refreshButton.grid(row=0, column=1)

window.config(menu=menubar)

window.mainloop()

在我看来,这应该可行,但事实并非如此。当我单击“添加书籍”窗口上的“添加”按钮时,它所做的只是将换行符添加到 .txt 文件中。我知道如果我使用操作系统库并为添加书籍窗口创建一个单独的 python 文件,它就可以工作,但如果可能的话,我宁愿将其全部放在一个代码中。我尝试了很多方法,并尝试在网络上搜索它,但一无所获。

最佳答案

问题的根本原因是您创建了多个 Tk 实例。你不可以做这个。如果要创建弹出窗口,请创建 Toplevel 的实例。正确的 Tkinter 应用程序仅通过一次 mainloop 调用创建一次 Tk 实例。

如果您的主要目标是简单地从用户那里获取输入(而不是学习如何编写自己的对话框),您可能需要考虑使用内置对话框之一。

例如:

import tkinter.simpledialog as tkSimpleDialog # python 3.x
...
def newBook():
BookTitle = tkSimpleDialog.askstring("Add Book","What is the name of the book?")
if BookTitle is not None:
bookTitle = '\n' + BookTitle
books = open('/tmp/books.txt', 'a')
books.write(bookTitle)
books.close()

关于python - 如何打开另一个窗口并从中获取数据,然后保存到文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16347798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com