# -*- coding: utf-8 -*-
import tkinter as tk
import os
REMEMBER_FILE_NAME='remember.txt'
ROOT_SIZE=(400, 280)
INPUT_ROOT_SIZE=(300, 150)
class WindowsRemember :
def __init__(self) :
self._root = None
self._text = None
self.initWindows()
def initWindows(self) :
self._root = tk.Tk()
self._root.wm_attributes('-alpha', 0.5) #透明度
self._root.wm_attributes('-toolwindow', True) #取消缩小扩大按钮
self._root.wm_attributes('-topmost', True) #置于顶层
self._root.title('123')
self._root.geometry(str(ROOT_SIZE[0])+'x'+str(ROOT_SIZE[1])) #设置大小
self._root.geometry('+0+0')
self._btn_add = None
self._btn_sub = None
self._input_text = None
def showText(self) :
#photo = PhotoImage(file='C:\\Users\\Administrator\\Desktop\\timg.gif') #python 默认支持gif格式
#imgLabel = Label(root,image = photo)
#self._text.pack() #side=tk.LEFT)
end_dir = os.getcwd()
file_path = end_dir + '\\' + REMEMBER_FILE_NAME
file = open(file_path, 'r', encoding='UTF-8')
file_desc = ''
idx = 1
for line in file.readlines() :
file_desc = file_desc + str(idx) + ' ' + line
idx += 1
file.close()
self._text = tk.Label(self._root, text=file_desc, justify='left', anchor=tk.W)
self._text.place(x=5)
self._btn_add = tk.Button(self._root, text='ADD', command=self.addText, activebackground='blue', anchor=tk.N)
self._btn_add.place(x=ROOT_SIZE[0]/2-50, y=ROOT_SIZE[1]-50)
print (self._btn_add.winfo_width())
self._btn_sub = tk.Button(self._root, text='SUB', command=self.subText, activebackground='blue', anchor=tk.N)
self._btn_sub.place(x=ROOT_SIZE[0]/2+30, y=ROOT_SIZE[1]-50)
def addText(self) :
add_root = tk.Tk() #?????????????????????
add_root.title('Please input:')
add_root.wm_attributes('-toolwindow', True)
add_root.wm_attributes('-topmost', True)
add_root.geometry(str(INPUT_ROOT_SIZE[0])+'x'+str(INPUT_ROOT_SIZE[1]))
self._input_text = None
#label = tk.Label(add_root, text='input:', height=5, width=INPUT_ROOT_SIZE[0]-50)
#label.place(x=5)
self._input_text = tk.StringVar()
tmp = tk.Entry(add_root, textvariable=self._input_text, width=int(INPUT_ROOT_SIZE[0]/10))
tmp.pack()
def _sure_cb() :
print('====', self._input_text.get())
btn_sure = tk.Button(add_root, text='SURE', command=_sure_cb, activebackground='blue', anchor=tk.N)
#btn_sure.place(x=INPUT_ROOT_SIZE[0]/2, y=INPUT_ROOT_SIZE[1]-50)
btn_sure.pack(side=tk.BOTTOM)
add_root.mainloop()
def subText(self) :
pass
def main() :
root = WindowsRemember()
root.showText()
root._root.mainloop()
main()
代码有点丑,总的思想就是,tk.Tk()创建一个窗口后,点某个按钮再创建一个tk.Tk()窗口,但是self._input_text.get()获取输入的数据失败,原因是,tk.Tk()创建的是一个新窗口,无法与原先的窗口获取有效交互。
解决方法:在画 #?????????的那一行,修改为tk.Toplevel(),tk.Toplevel()是和tk.Tk()有着相同方法的窗口,唯一的是,他是一个顶级的弹出类窗口。