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