你如何event从一个单独的对象调用tkinter ?
我正在寻找像wxWidgets这样的东西wx.CallAfter.例如,如果我创建一个对象,并将其传递给我的Tk根实例,然后尝试从我的对象调用该根窗口的方法,我的应用程序将锁定.
我能想到的最好的after方法是使用方法并从我的单独对象中检查状态,但这似乎很浪费.
Label小部件不进行换行.Message小部件将换行文本,但强制它大致为方形.这是一个例子.
from Tkinter import *
root = Tk()
root.title("hello")
Message(root, text=48*'xxxxx ').grid(row=0, column=0, columnspan=3)
Label(root, text='Name:').grid(row=1, column=0)
Entry(root, width=50).grid(row=1, column=1)
Button(root, text="?").grid(row=1, column=2)
Button(root, text="Left").grid(row=2, column=0)
Button(root, text="Center").grid(row=2, column=1)
Button(root, text="Right").grid(row=2, column=2)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
我知道我可以用它aspect=700来改变形状,但硬编码这样的数字就是我想要避免的.
我有一个深色背景的文本小部件,我看不到光标的位置.有没有办法改变(闪烁)文本光标的颜色?
我正在尝试使用此链接上提供的minty解决方案为我的基于Tkinter的程序生成单个exe文件:
这是我在setup.py中写的内容:
from distutils.core import setup
import py2exe, sys, os
sys.argv.append('py2exe')
setup(windows=[{'script': 'filename.py'}], \
options={"py2exe": {"includes": ["decimal", "Tkinter", \
"tkFileDialog", "csv", "xml.dom.minidom", "os"], \
'bundle_files': 1, 'compressed': False}}, \
zipfile = None)
Run Code Online (Sandbox Code Playgroud)
它为Tkinter创建了一个'tcl'文件夹,即使我已经指定了bundle_files = 1.另外它还会生成一些其他的exe w9xpopen.exe.但是,我的实际exe不会运行,也不会出现任何错误.如果我删除所有这些包含它甚至不起作用.
我对这里可能缺少什么的想法?我正在使用64位Windows 7机器.
我是python编程的新手,我仍在试图找出lambda的用法.经过多次谷歌搜索后,我想要一些gui程序,我认为我需要使用这个按钮来工作,因为我需要它
这个工作
mtrf = Button(root, text = "OFF",state=DISABLED,command = lambda:b_clicked("mtrf"))
Run Code Online (Sandbox Code Playgroud)
但是当我为Scale做同样的事情时它不起作用
leds = Scale(root,from_=0,to=255, orient=HORIZONTAL,state=DISABLED,variable =num,command =lambda:scale_changed('LED'))
Run Code Online (Sandbox Code Playgroud) 试图学习tkinter和python.我想在相邻的框架中显示文本小部件的行号
from Tkinter import *
root = Tk()
txt = Text(root)
txt.pack(expand=YES, fill=BOTH)
frame= Frame(root, width=25)
#
frame.pack(expand=NO, fill=Y, side=LEFT)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
我在一个名为unpythonic的网站上看到了一个例子,但它假设txt的行高为6像素.
我正在尝试这样的事情:
1)将Any-KeyPress事件绑定到返回按键发生的行的函数:
textPad.bind("<Any-KeyPress>", linenumber)
def linenumber(event=None):
line, column = textPad.index('end').split('.')
#creating line number toolbar
try:
linelabel.pack_forget()
linelabel.destroy()
lnbar.pack_forget()
lnbar.destroy()
except:
pass
lnbar = Frame(root, width=25)
for i in range(0, len(line)):
linelabel= Label(lnbar, text=i)
linelabel.pack(side=LEFT)
lnbar.pack(expand=NO, fill=X, side=LEFT)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会在帧上给出一些奇怪的数字.有更简单的解决方案吗?怎么解决这个问题?
我正在整理一些程序,现在是开始为其中一些程序制作GUI的时候了.该代码目前是用Python 3.3编写的.
我研究了一些Python的GUI,即Tkinter,wxPython和PyGTK.我发现的一切似乎只是创建看起来相当陈旧的GUI.我已经创建了几个示例GUI,它们都可以工作,它们看起来非常像Windows 95.
我发现/创建的一个例子: 
我想要的一个例子是: 
它只是一个关于GUI如何工作的高级知识,还是只有更适合"现代"外观GUI的GUI模块?
如果它是关于GUI如何工作的高级知识,是否有一些关于如何使GUI看起来更"现代"的教程.
提前致谢.
下面的代码产生了一个丑陋但功能性的例子,在文本小部件中使用滚动条并导致一些问题.注意:这是在Windows框中使用Python 3完成的.
出现的滚动条附加到框架,虽然它滚动文本框内容,我宁愿它附加到文本小部件本身.我一直无法做到这一点.
有一些名为"scrolledtext"的Tkinter模块的引用,应该是一个更好的机制,用于向文本框添加滚动条但是,我还没有找到任何如何导入它并调用它的例子我能够开始工作(可能需要一个例子).
frame1 = tk.Frame(win,width=80, height=80,bg = '#808000')
frame1.pack(fill='both', expand='yes')
scrollbar = Scrollbar(frame1)
scrollbar.pack(side=RIGHT, fill=Y)
editArea = Text(frame1, width=10, height=10, wrap=WORD, yscrollcommand=scrollbar.set)
editArea.pack()
scrollbar.config(command=editArea.yview)
editArea.place(x=10,y=30)
Run Code Online (Sandbox Code Playgroud) from Tkinter import *
master = Tk()
listbox = Listbox(master)
listbox.pack()
listbox.insert(END, "a list entry")
for item in ["one", "two", "three", "four"]:
listbox.insert(END, item)
listbox2 = Listbox(master)
listbox2.pack()
listbox2.insert(END, "a list entry")
for item in ["one", "two", "three", "four"]:
listbox2.insert(END, item)
master.mainloop()
Run Code Online (Sandbox Code Playgroud)
上面的代码创建了一个tkinter包含两个列表框的窗口.但是如果要从两者中检索值,则会出现问题,因为只要在一个值中选择一个值,它就会取消选择在另一个中选择的值.
这只是开发人员必须忍受的限制吗?
Tkinter的canvas小部件具有内置功能:
移动/与平移画布(例如用点击+拖拽)canvas.scan_mark和canvas.scan_dragto,看到这个问题
缩放画布上的矢量元素canvas.scale,但遗憾的是,这不适用于画布上的位图图像
幸运的是,此方法允许缩放图像(通过手动重绘图像的缩放部分).但:
当我们重新绘制画布的特定部分时,移动/平移功能将不再起作用...
我们绝对需要渲染超过当前显示的区域,以允许移动/平移.假设我们在画布上有1000x1000位图,我们想要缩放50倍...如何避免在内存中有50.000 x 50.000像素的位图?(RAM中2.5千兆像素太大).我们可以考虑仅渲染视口,或者比当前视口稍微多一点以允许平移,但是一旦平移导致渲染区域的边缘怎么办?
如何在Tkinter画布上使用移动/平移+缩放功能,适用于图像?