在这里,我们将给大家分享关于PythonTkinter:尝试获取小部件大小的知识,让您更了解tkinter获取entry内容的本质,同时也会涉及到如何更有效地Python-在Tkinter中交互式验证
在这里,我们将给大家分享关于Python Tkinter:尝试获取小部件大小的知识,让您更了解tkinter获取entry内容的本质,同时也会涉及到如何更有效地Python -在Tkinter中交互式验证Entry小部件内容、Python 2.7 / Windows:带有透明背景的tkinter / ttk小部件,ttk框架背景颜色、Python 3 Tkinter-使用网格创建覆盖100%宽度的文本小部件、python gui tkinter快速入门教程 | python tkinter tutorial的内容。
本文目录一览:- Python Tkinter:尝试获取小部件大小(tkinter获取entry内容)
- Python -在Tkinter中交互式验证Entry小部件内容
- Python 2.7 / Windows:带有透明背景的tkinter / ttk小部件,ttk框架背景颜色
- Python 3 Tkinter-使用网格创建覆盖100%宽度的文本小部件
- python gui tkinter快速入门教程 | python tkinter tutorial
Python Tkinter:尝试获取小部件大小(tkinter获取entry内容)
我正在尝试使用该winfo_geometry()
函数查找窗口的大小,但最终返回的结果1x1+0+0
我也曾尝试过,winfo_height,winfo_width
但我不断1
码
from tkinter import *root=Tk()root.geometry(''400x600'')print (root.winfo_width())print (root.winfo_height())print (root.winfo_geometry())root.mainloop()
答案1
小编典典您试图在渲染窗口之前获取尺寸。
root.update()
在print
s之前添加一个,它会显示正确的尺寸。
from Tkinter import *root=Tk()root.geometry(''400x600'')root.update()print (root.winfo_width())print (root.winfo_height())print (root.winfo_geometry())root.mainloop()
Python -在Tkinter中交互式验证Entry小部件内容
交互验证tkinter Entry
小部件中的内容的推荐技术是什么?
我已经阅读了有关使用validate=True
和的文章validatecommand=command
,并且看来这些功能受到以下事实的限制:如果validatecommand
命令更新了Entry小部件的值,这些功能将被清除。
鉴于这种行为,我们应该绑定的KeyPress,Cut
以及Paste
事件和监视/更新我们的Entry
小部件的价值,通过这件事情?(还有我可能错过的其他相关事件?)
还是我们应该完全忘记交互式验证,而只对FocusOut
事件进行验证?
答案1
小编典典正确的答案是,使用validatecommand
小部件的属性。不幸的是,尽管在Tkinter
中有足够的文档记录,但该功能在Tkinter
领域中的记录不足。即使没有很好地记录下来,它也具有验证所需的一切,而无需求助于绑定或跟踪变量,或在验证过程中修改小部件。
诀窍是要知道您可以让Tkinter
将特殊值传递给validate
命令。这些值为您提供了决定数据是否有效所需的所有信息:编辑之前的值,编辑之后的值(如果编辑有效)以及其他几位信息。但是,要使用这些命令,您需要做一点巫术,以使此信息传递到您的validate
命令。
注意:验证命令返回True
或至关重要False
。任何其他情况都会导致该小部件的验证被关闭。
这是一个仅允许小写的示例(并显示所有这些时髦的值):
import tkinter as tk # python 3.x# import Tkinter as tk # python 2.xclass Example(tk.Frame): def __init__(self, parent): tk.Frame.__init__(self, parent) # valid percent substitutions (from the Tk entry man page) # note: you only have to register the ones you need; this # example registers them all for illustrative purposes # # %d = Type of action (1=insert, 0=delete, -1 for others) # %i = index of char string to be inserted/deleted, or -1 # %P = value of the entry if the edit is allowed # %s = value of entry prior to editing # %S = the text string being inserted or deleted, if any # %v = the type of validation that is currently set # %V = the type of validation that triggered the callback # (key, focusin, focusout, forced) # %W = the tk name of the widget vcmd = (self.register(self.onValidate), ''%d'', ''%i'', ''%P'', ''%s'', ''%S'', ''%v'', ''%V'', ''%W'') self.entry = tk.Entry(self, validate="key", validatecommand=vcmd) self.text = tk.Text(self, height=10, width=40) self.entry.pack(side="top", fill="x") self.text.pack(side="bottom", fill="both", expand=True) def onValidate(self, d, i, P, s, S, v, V, W): self.text.delete("1.0", "end") self.text.insert("end","OnValidate:\n") self.text.insert("end","d=''%s''\n" % d) self.text.insert("end","i=''%s''\n" % i) self.text.insert("end","P=''%s''\n" % P) self.text.insert("end","s=''%s''\n" % s) self.text.insert("end","S=''%s''\n" % S) self.text.insert("end","v=''%s''\n" % v) self.text.insert("end","V=''%s''\n" % V) self.text.insert("end","W=''%s''\n" % W) # Disallow anything but lowercase letters if S == S.lower(): return True else: self.bell() return Falseif __name__ == "__main__": root = tk.Tk() Example(root).pack(fill="both", expand=True) root.mainloop()
有关调用该register
方法时幕后情况的更多信息,请参见输入验证tkinter
Python 2.7 / Windows:带有透明背景的tkinter / ttk小部件,ttk框架背景颜色
是否可以使用透明背景configurationtkinter或ttk小部件(Label,Entry,Text),以便将它们放置在具有自定义背景颜色的容器中,或放置在canvasgraphics或图像之上?
我也在寻找一种方法来改变ttk框架小部件的背景颜色?
我是否需要使用新的ttk Style对象来完成上述操作? (我是tkinter / ttk的新手,仍然试图让我的头正确的方式来做事情)。
在Windows上使用os.path用于POSIXpath操作
使用C#中的参数委托给其他线程
input语言挂钩
什么是将C ++ 11asynchronous/期货与WindowsasynchronousIO结合起来的最佳API?
事件发现当互联网丢失
如何testing远程UDP端口
Pow在Windows上的替代品?
angular度cli不能在窗户上工作10
python-keyring如何在Windows上工作?
失去参数值
除了 OSX之外,你不能做任何事情,因为所有的部件都是在真正的矩形窗口上绘制的(除非你使用一些低级别的技巧把窗口从有关的窗口中切出来,而不是我推荐的方法,即使我已经得到了代码 – 对于Tcl / Tk,而不是Python / Tkinter – 确实如此)。 OSX是个例外,因为这些小部件(大部分)并不是在真实的windows上绘制的,而是使用了一个轻量级的系统(因为这就是OSX的工作原理)。
你可以调整窗口小部件的边界比平常少,如果你使用的是一种使它们从根本上保持正方形的样式的话,这是可以的。 或者,如果您将画布用于“有趣”的表面,则可以在画布上构建类似按钮的事物,这对您实际做的事情可能会更好。
要更改Ttk框架的背景颜色,您必须对其应用样式。 到目前为止,我所见过的风格创作的最佳指导是在tkdocs风格的教程中 ,当我想要查看如何做这些事情的时候, 我就去了这里。 (是的,Ttk文档本身应该包括这个,但还没有。)
Python 3 Tkinter-使用网格创建覆盖100%宽度的文本小部件
我知道您可以使用Pack Geometry Manager轻松创建一个Tkinter Text小部件,该小部件覆盖100%的宽度:
from tkinter import *root = Tk()textWidget = Text(root)textWidget.pack(side=TOP, fill=X)root.geometry(''600x1000'')root.mainloop()
但是我想知道,如何使用带有grid_columnconfigure的Grid Geometry Manager完成相同的任务?
答案1
小编典典使用网格需要执行以下步骤:
- 使用
grid
文本窗口小部件的方法,为其指定行和列。在这种情况下,您可以使用0,0。 - 同样使用该
grid
方法,定义是否要让小部件“粘贴”到给定空间的两侧。您可以这样做,因此可以给字符串“ nsew”(北,南,东,西)。 - 配置窗口小部件所在的行的权重为1(一)。用做到这一点
grid_rowconfigure
。这将导致该行垂直扩展以填充任何多余的空间 - 配置窗口小部件所在的列的权重为1(一)。用做到这一点
grid_columnconfigure
。这将导致列水平扩展以填充任何额外的空间。
请注意,grid_rowconfigure
和grid_columnconfigure
是在 包含
文本窗口小部件的窗口小部件上调用的方法,而不是在文本窗口小部件本身上调用的方法。grid
在文本小部件上调用该方法,因为您正在告诉文本小部件应将其放置在其父级中的位置。
您的代码如下所示:
from tkinter import *root = Tk()textWidget = Text(root)textWidget.grid(row=0, column=0, sticky="nsew")root.grid_rowconfigure(0, weight=1)root.grid_columnconfigure(0, weight=1)root.geometry(''600x1000'')root.mainloop()
当您只有一个小部件可以填充分配给它的所有空间时,我建议pack
您这样做仅仅是因为您可以用一行代码而不是三行代码来完成所有事情。pack
非常适合此类问题。grid
顾名思义,它更适合于创建小部件网格。话虽如此,任何一个都可以接受。你可以混合和匹配grid
,并pack
在同一程序中,虽然你不能共享共同的父窗口部件使用它们两者。
python gui tkinter快速入门教程 | python tkinter tutorial
本文首发于个人博客https://kezunlin.me/post/d5c57f56/,欢迎阅读最新内容!
python tkinter tutorial
<!--more-->
Guide
main ui
messagebox
- showinfo()
- showwarning()
- showerror()
- askquestion()
- askokcancel()
- askyesno()
- askretrycancel()
- askyesnocancel()
filedialog
- asksaveasfilename()
- asksaveasfile()
- askopenfilename()
- askopenfile()
- askdirectory()
- askopenfilenames()
- askopenfiles()
demo
from numpy.random import seed, uniform
from numpy import uint8, uint16, load, save
from cv2 import imread, imwrite
from os import listdir, makedirs
from os.path import exists, basename
# for python 3
from tkinter import Tk, Frame, messagebox, filedialog, Button, Label, StringVar
class MyGUI():
def __init__(self):
self.root = Tk()
sw = self.root.winfo_screenwidth()
sh = self.root.winfo_screenheight()
ww = 700
wh = 200
x = (sw-ww) / 2
y = (sh-wh) / 2
self.root.title(''Image Compress Tool'')
# center
self.root.geometry("%dx%d+%d+%d" % (ww, wh, x, y))
# frame1
frame1 = Frame(self.root)
frame1.grid(row=0, column=0, sticky=''w'')
self.input_btn = Button(frame1, text="Input Folder", width=10, height=3, command=self.set_input_folder)
self.input_btn.pack(side=''left'')
self.input_label_text = StringVar()
self.input_label_text.set("Input Folder")
self.input_label = Label(frame1, textvariable=self.input_label_text, width=70, height=3)
self.input_label.pack(side=''left'')
# frame2
frame2 = Frame(self.root)
frame2.grid(row=1, column=0, sticky=''w'')
self.output_btn = Button(frame2, text="Output Folder", width=10, height=3, command=self.set_output_folder)
self.output_btn.pack(side=''left'')
self.output_label_text = StringVar()
self.output_label_text.set("Output Folder")
self.output_label = Label(frame2, textvariable = self.output_label_text, width=70, height=3)
self.output_label.pack(side=''left'')
# frame3
frame3 = Frame(self.root)
frame3.grid(row=2, column=0, sticky=''nw'')
self.run_btn = Button(frame3, text="执行加密", width=10, height=3, command=self.run_task)
self.run_btn.pack(side=''left'')
self.run_label_text = StringVar()
self.run_label_text.set("Ready")
self.run_label = Label(frame3, textvariable = self.run_label_text, width=70, height=3)
self.run_label.pack(side=''left'')
def mainloop(self):
self.root.mainloop()
def set_input_folder(self):
result = filedialog.askdirectory()
self.input_label_text.set(result)
def set_output_folder(self):
result = filedialog.askdirectory()
self.output_label_text.set(result)
def run_task(self):
input_folder = self.input_label_text.get()
output_folder = self.output_label_text.get()
#print("input_folder: "+input_folder)
#print("output_folder: "+output_folder)
if exists(input_folder):
#batch_compress(input_folder, output_folder)
self.run_label_text.set("Compress OK.")
messagebox.showinfo("Info", "Compress OK.")
else:
messagebox.showwarning("Warn", "Please input folder")
def gui():
app = MyGUI()
app.mainloop()
def main():
gui()
if __name__ =="__main__":
main()
snapshots
Reference
- tkinter demo
- tkinter docs
History
- 20190411: created.
Copyright
- Post author: kezunlin
- Post link: https://kezunlin.me/post/d5c57f56/
- Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.
今天关于Python Tkinter:尝试获取小部件大小和tkinter获取entry内容的介绍到此结束,谢谢您的阅读,有关Python -在Tkinter中交互式验证Entry小部件内容、Python 2.7 / Windows:带有透明背景的tkinter / ttk小部件,ttk框架背景颜色、Python 3 Tkinter-使用网格创建覆盖100%宽度的文本小部件、python gui tkinter快速入门教程 | python tkinter tutorial等更多相关知识的信息可以在本站进行查询。
本文标签: