我在服务器上使用linux.我没有root权限.我在本地安装了python-3.2.3到"/ home/sam/install_sam".当我导入tkinter模块.我收到以下错误:
ImportError: No module named _tkinter, please install the python-tk package
Run Code Online (Sandbox Code Playgroud)
我知道我需要安装Tkinter模块.因为我没有root权限.我不能像下面的命令一样使用:
apt-get install python-tk
sudo apt-get install python-tk
Run Code Online (Sandbox Code Playgroud)
我在goolge上搜索.我从 这里得到tcl/tk.我安装它们使用以下命令.
cd ~/Downloads/tcl8.5.11/unix
./configure --prefix=/home/sam/install_sam/tcl
make
make install
cd ~/Downloads/tk8.5.11/unix
./configure --prefix=/home/sam/install_sam/tk
--with- tcl=/home/sam/Downloads/tcl8.5.11/unix
make
make install
cd ~/Downloads/Python3.2.3/
export LD_LIBRARY_PATH=/home/sam/install_sam/tcl/lib:/home/sam/install_sam/tk/lib
export LD_RUN_PATH=/home/sam/install_sam/tcl/lib:/home/sam/install_sam/tk/lib
./configure --prefix=/home/sam/install_sam/python
make
make install
Run Code Online (Sandbox Code Playgroud)
我仍然有错误:INFO:找不到Tcl/Tk库和/或标题.我应该如何为python配置tcl/tk
当我看到NMT Tkinter 8.5参考文献中的一个最小例子时,我正在刷Tkinter.
#!/usr/bin/env python
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.grid()
self.createWidgets()
def createWidgets(self):
self.quitButton = tk.Button(self, text='Quit',command=self.quit)
self.quitButton.grid()
app = Application()
app.master.title('Sample application')
app.mainloop()
Run Code Online (Sandbox Code Playgroud)
这一切都很好,直到我注意到Tk该类没有被初始化.在我可以找到的其他在线参考资料(Python的库参考,effbot.org,TkDocs)中,通常会调用root = tk.Tk()其他示例构建的参考资料.我也没有Tk在NMT的引用上看到任何类型的初始化类引用.
我可以得到的有关Tk该类的信息也很模糊,Python Reference仅将其列为"顶级窗口小部件......通常是应用程序的主窗口".最后,如果我替换前面提到的代码段中的最后几行:
root = tk.Tk()
app = Application(root)
Run Code Online (Sandbox Code Playgroud)
该程序将像以前一样运行.考虑到这一切,我有兴趣知道的是:
root = tk.Tk()实际上是做什么的(例如,什么被初始化)以及为什么前一个片段在没有它的情况下工作?Tk()并在Frame课堂上构建我的应用程序,我会遇到任何陷阱或限制吗?我正在学习Python中的基本GUI,我遇到了一个示例,用于从Stack Overflow上的文件资源管理器中读取文件名.
from Tkinter import Tk
from tkFileDialog import askopenfilename
Tk().withdraw() # we don't want a full GUI, so keep the root window from appearing
filename = askopenfilename() # show an "Open" dialog box and return the path to the selected file
print(filename)
Run Code Online (Sandbox Code Playgroud)
当我尝试在IDLE中运行它时,这个特殊的脚本工作正常,但是如果我在Windows 7中从命令提示符处尝试,则不会运行.
Python版本:2.7.这是我得到的输出错误.
>>> from Tkinter import Tk
>>> from tkFileDialog import askopenfilename
>>> Tk().withdraw()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\Lib\lib-tk\Tkinter.py", line 1685, in __init__
self.tk = _tkinter.create(screenName, …Run Code Online (Sandbox Code Playgroud) 我知道通过Tkinter将MxNx3 numpy数组显示为RGB图像的配方,但我的配方在此过程中制作了几个数组副本:
a = np.random.randint(low=255, size=(100, 100, 3), dtype=np.uint8) # Original
ppm_header = b'P6\n%i %i\n255\n'%(a.shape[0], a.shape[1])
a_bytes = a.tobytes() # First copy
ppm_bytes = ppm_header + a_bytes # Second copy https://en.wikipedia.org/wiki/Netpbm_format
root = tk.Tk()
img = tk.PhotoImage(data=ppm_bytes) # Third and fourth copies?
canvas = tk.Canvas(root, width=a.shape[0], height=a.shape[1])
canvas.pack()
canvas.create_image(0, 0, anchor=tk.NW, image=img) # Fifth copy?
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
如何以最少的份数获得相同的结果?
理想情况下,我会创建一个numpy数组,它是Tkinter PhotoImage对象使用的相同字节的视图,有效地为我提供了一个PhotoImage可变的像素值,并使更新Tkinter显示更便宜和快速.我不知道如何从Tkinter中提取这个指针.
也许有一种通过ctypes的方式,正如这里暗示的那样?
这个PhotoImage.put()方法似乎很慢,但也许我错了,那是一条前进的道路?
我尝试制作一个bytearray()包含ppm标题和图像像素值,然后使用numpy.frombuffer()查看图像像素值作为一个numpy数组,但我认为PhotoImage构造函数想要一个bytes()对象,而不是一个bytearray()对象,而且我认为Tkinter复制字节的它data …
我正在使用Text小部件,我有一个关于Tk使用的旧式快捷方式的问题.
即:
全选:Ctrl + /vs Ctrl + a
Cut:Ctrl + wvs Ctrl + x
Copy:Meta + wvs Ctrl + c
Paste:Ctrl + yvsCtrl + v
在Windows上,除Ctrl + a外,它们都可以工作.
1)是否可以重定向绑定,所以.bind('<Control-a>')调用已绑定Ctrl + /?
2)我试过"全选":
txt_text.bind('<Control-a>', self.ctext_selectall)
Run Code Online (Sandbox Code Playgroud)
哪里:
def ctext_selectall(self, callback):
"""Select all text in the text widget"""
self.txt_text.tag_add('sel', '1.0', 'end')
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为Ctrl + a默认工作(光标转到开始).它与其他一些未绑定的字母一起使用.如果不能解决1以下的解决方案,是否有机会使这项工作成功?
我试图在窗口小部件没有焦点时更改Mac OS X上Tkinter文本窗口小部件中所选文本的默认背景颜色.默认的未聚焦选择颜色为灰色.经过几个小时的搜索,我无法找到一个开箱即用的解决方案来做到这一点.这是我尝试过的:
selectbackground当窗口小部件未聚焦时,使用该选项更改选择颜色不会更改选择颜色.例如它保持灰色.Text.tag_configure("sel", background=...)ttk.Style.map与"!focus"入境部件(及其他)国家的作品,而不是文本部件.所以我不得不自己动手(见下文).有一个更好的方法吗?
import Tkinter as tk
# Replace 'tag_out' with 'tag_in'
def replace_tag(widget, tag_out, tag_in):
ranges = widget.tag_ranges(tag_out)
widget.tag_remove(tag_out, ranges[0], ranges[1])
widget.tag_add(tag_in, ranges[0], ranges[1])
def focusin(e):
replace_tag(e.widget, "sel_focusout", "sel")
def focusout(e):
replace_tag(e.widget, "sel", "sel_focusout")
root = tk.Tk()
# Create a Text widget with a red selected text background
text = tk.Text(root, selectbackground="red")
text.pack()
# Add some text, and select it
text.insert("1.0", "Hello, world!")
text.tag_add("sel", "1.0", "end") …Run Code Online (Sandbox Code Playgroud) 目前我正在开发一个程序,它有自己的项目文件,里面就像子文件,我想知道如何使用treeview小部件显示项目文件中的所有子文件,Any Ideas?
提前致谢!
我有一个应用程序,可以在使用Perl/TKGUI的Windows,Linux和Solaris上运行.由于条件的限制,我们只限于学习Perl/TK 只.而且,我们仅限于旧Perl/Tk版本5.00404.
我想在这些限制内工作,使GUI看起来尽可能美观和现代.
是否有任何网络资源具有传统知识设计方案(按钮,框架,颜色等),可以帮助我完成这项工作?
我也在寻找像我在这里找到的现代化建议:
如果您发现您的Tk应用程序在基于X的系统上看起来有点难看,请尝试在脚本顶部添加以下行:
Run Code Online (Sandbox Code Playgroud)$mw->optionAdd("*font", "-*-arial-normal-r-*-*-*-120-*-*-*-*-*-*"); $mw->optionAdd("*borderWidth", 1);
我试图找出在Windows中创建Tcl starkit的基本步骤.之前我曾问过类似的问题,并购买了一本关于Tcl编程的书,访问了wiki.tcl.tk,直接通过电子邮件发送了Tcl程序员等等......总而言之,我从我的资源中得到了很好的反馈.网站; 但是,在构建批处理文件,使用命令控制台和创建目录时,我没有解释说我是一个完整的新手.
我真的需要有人基本上为我拼出一些东西,因为我似乎无法解释任何人试图告诉我的内容.我认为Visual Studio和.NET让我变得愚蠢:)
目前,我已经下载了tclkit,tclkitsh和sdx.kit,以及创建了一个简单的程序(Test_App.tcl).到目前为止,我知道我必须通过控制台(tclkitsh)运行sdx,创建一个批处理文件(sdx.bat),创建一个vfs目录,然后使用sdx wrap.我完全忘记了如何做这些简单的步骤.
这看起来似乎太多了,但如果有人能够用超级新手术语翻译,我会非常感激.我希望有类似的东西:在tclkitsh控制台中,输入以下内容......; 在tclkit.exe中,键入以下内容...; 现在你应该...... 并且.
谢谢,
DFM
所以...我一直试图让这个工作几个星期了.我可以通过.exe安装MinGW,但不管我做什么我似乎无法获得支持或ppm安装MinGW以这样的方式工作,我的编译Tk-804.029将正确使用'make'命令.
(安装Perl模块:
)
ppm安装MinGW也行不通,似乎觉得找不到包.所以我不知所措.系统在x64设置上运行Windows 7.