Python Tkinter entry.get()只在每单击两次按钮时起作用

Python Tkinter entry.get()只在每单击两次按钮时起作用,python,tkinter,Python,Tkinter,我正在制作一个简单的flashcardtkinter应用程序,我遇到了一个问题,当我管理主题时,只有每秒钟一项被添加到文件中 例如,假设我转到管理主题页面,我想添加主题:subject1,subject2,subject3,subject4主题n。 唯一会添加到文件中的主题是具有奇数结尾的主题,是否有解决方案 对此负责的代码: #subjects window def managesubjectsF(): def addF(): f = open ('subjectlis

我正在制作一个简单的flashcard
tkinter
应用程序,我遇到了一个问题,当我管理主题时,只有每秒钟一项被添加到文件中

例如,假设我转到管理主题页面,我想添加主题:
subject1
subject2
subject3
subject4
<代码>主题n。 唯一会添加到文件中的主题是具有奇数结尾的主题,是否有解决方案

对此负责的代码:

#subjects window
def managesubjectsF():
    def addF():
        f = open ('subjectlist.txt', 'a')
        f.write(addsubjectE.get() + '\n')
        f.close()
        addsubjectE.delete('0', 'end')
    subjectPage = Tk()
    subjectPage.title('Add subject')
    subjectPage.resizable(False, False)
    subjectPage.configure(background = 'light blue')
    subjectPage.geometry('260x70')
    addsubjectE = Entry(subjectPage, width=23, font=('bold', 14))
    addsubjectE.grid(column=1, row=1)
    addS = Button(subjectPage, text='Add', font=('bold', 15), command = addF)
    addS.grid(column=1, row=2, sticky = N)
实施的最低示例:

#modules
from tkinter import *
import os.path

#implementations
count=0
subjectlist = []

#main window details
root = Tk()
root.geometry('225x350')

#list of available subjects
choice = Listbox(root, font = ('bold', 15))
choice.grid(column=1, row=2)
if os.path.exists('./subjectlist.txt') == True:
    with open('subjectlist.txt', 'r') as f:
        for line in f:
            count += 1
    f.close()
    f = open('subjectlist.txt', 'r')
    for i in range(count):
        choice.insert(END, (f.readline().strip()))
        subjectlist.append(f.readline().strip())
    f.close()
else:
    f = open('subjectlist.txt', 'w')
    f.close()
    
#subjects window
def managesubjectsF():
    def addF():
        f = open ('subjectlist.txt', 'a')
        f.write(addsubjectE.get() + '\n')
        f.close()
        addsubjectE.delete('0', 'end')
    subjectPage = Toplevel()
    subjectPage.geometry('260x70')
    addsubjectE = Entry(subjectPage, width=23, font=('bold', 14))
    addsubjectE.grid(column=1, row=1)
    addS = Button(subjectPage, text='Add', font=('bold', 15), command = addF)
    addS.grid(column=1, row=2, sticky = N)

#buttons
addsubjectsB = Button(root, text = 'Manage subjects', font = ('bold', 15), command = managesubjectsF)
addsubjectsB.grid(column=1, row=3, sticky = N)

root.mainloop()
(移动评论以回答问题)

您正在调用
readline
两次,移动文件指针并跳过主题

for i in range(count):
    choice.insert(END, (f.readline().strip()))
    subjectlist.append(f.readline().strip())  # reading next line
尝试读取该值一次,然后将其存储在两个列表中:

for i in range(count):
    s = f.readline().strip()  # read once
    choice.insert(END, (s))
    subjectlist.append(s) 

不要多次调用
tk.tk()
,请改用
tk.Toplevel
。感谢您提供了指针,但是将其更改为tk.Toplevel仍然无法解决问题。这不可能是您的全部代码-
mainloop()
不会在任何地方调用(这是一项要求)@Borntool请提供一个最小的可复制示例。从表面上看,我什么也说不出来。我在代码中看到了两个
f.readline()
choice.insert(END,(f.readline().strip())
然后
subjectlist.append(f.readline().strip())
。档案中的主题有两次吗?如果不是,则执行一个readline,然后将该值存储两次。