Tkinter中新建視窗內Entry無法獲取值

2021-10-09 21:06:44 字數 3119 閱讀 7493

# -*- 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.strin**ar()

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()有著相同方法的視窗,唯一的是,他是乙個頂級的彈出類視窗。

vmvare中新建rancher os虛擬機器

在生產中執行docker,最小 最簡單的方法之一是使用rancheros。rancheros中的所有元件都是由docker管理的容器執行,包括系統服務,如udev和syslog。因為rancheros只包含執行docker所需的服務,所以rancheros比大多數傳統作業系統小得多。通過刪除不必要的...

Nuke中新建執行緒的方法

寫完後在menu.py中通過os.system path 方法即可開啟document。但問題出現了。這個說明文件用word開啟後會占用nuke主線程,導致nuke陷入假死狀態。只有關閉word才可以解除nuke假死。也就是說,實際上,word與nuke是共用同乙個執行緒,顯然這是不可接受的。於是寫...

48 tkinter視窗居中

import tkinter as tk 匯入tkinter模組 計算視窗居中的位置 def get window positon width,height window x position root.winfo screenwidth width 2 window y position root...