标签: tk-toolkit

使用Tcl/Tk如何将菜单放在Ubuntu Unity的屏幕顶部?

我有一个简单的Tcl脚本,它创建一个带菜单的窗口.

#! /usr/bin/tclsh
package require Tk
#  Create the main message window
message .m -text {Hello Tcl!} -background white
pack .m -expand true -fill both -ipadx 100 -ipady 40

#  Create the main menu bar with a Help-About entry
menu .menubar
menu .menubar.help -tearoff 0
.menubar add cascade -label Help -menu .menubar.help -underline 0
.menubar.help add command -label {About Hello ...} \
    -accelerator F1 -underline 0 -command showAbout

#  Define a procedure - an action for Help-About
proc showAbout {} …
Run Code Online (Sandbox Code Playgroud)

ubuntu tk-toolkit menu tcl ubuntu-unity

6
推荐指数
1
解决办法
428
查看次数

Python tkinter.filedialog askfolder干扰clr

我主要在Spyder工作,构建需要弹出文件夹或文件浏览窗口的脚本.

下面的代码在spyder中完美运行.在Pycharm,askopenfilename运作良好,而askdirectory什么都不做(卡住).但是,如果在调试模式下运行 - 脚本运行良好.我试图从SAS jsl运行脚本 - 同样的问题.

任何想法我该怎么办?Python 3.6 Pycharm 2017.2

谢谢.

我使用的准则包括:

import clr #pythonnet 2.3.0
import os
import tkinter as tk
from tkinter.filedialog import (askdirectory,askopenfilename)

root = tk.Tk()
root.withdraw()
PPath=askdirectory(title="Please select your installation folder location", initialdir=r"C:\Program Files\\")

t="Please select jdk file"
if os.path.exists(os.path.expanduser('~\Documents')):
    FFile = askopenfilename(filetypes=(("jdk file", "*.jdk"),("All Files", "*.*")),title=t, initialdir=os.path.expanduser('~\Documents'))
else:
    FFile= askopenfilename(filetypes=(("jdk file", "*.jdk"),("All Files", "*.*")),title=t)

sys.path.append(marsDllPath)
a = clr.AddReference('MatlabFunctions')
aObj = a.CreateInstance('Example.MatlabFunctions.MatLabFunctions')
Run Code Online (Sandbox Code Playgroud)

编辑:似乎与pythonnet"imoprt clr"相关的问题,但我确实在代码中需要它.

类似的问题在这里问:https://github.com/pythonnet/pythonnet/issues/648

.net python tk-toolkit tkinter python.net

6
推荐指数
1
解决办法
471
查看次数

tk, tcl exec stderr, stdout 分开

我有一个 tcl 脚本。

问题是我必须调用一个可以向 stderr 写入内容的脚本(这不是严重失败)。

我想在 tk/tcl 中分别捕获 stderr 和 stdout。

if { [catch {exec "./script.sh" << $data } result] } {
   puts "$::errorInfo"
}
Run Code Online (Sandbox Code Playgroud)

此代码将返回我的结果,但它也包含 stderr。

我也想将结果传递给变量。

提前致谢...

scripting tk-toolkit tcl

5
推荐指数
1
解决办法
5231
查看次数

如何使用 Python 中的 Tkinter 窗口使 matplotlib:pyplot 可调整大小?

我正在尝试在每个有一个 matplotlib 图的框架中构建一个网格。当我调整窗口大小时,图形保持固定大小并且不会调整大小以适应空白空间。有没有办法让图形根据画布改变其大小(希望它会随着窗口大小而改变)?

在扩展窗口之前 展开窗口后

这就是我在每一帧中嵌入的方式:

self._figure = pyplot.figure(figsize=(4,4))       
self._axes = self._figure.add_subplot(111)
self._canvas = FigureCanvasTkAgg(self._figure, master=self._root)
self._canvas.get_tk_widget().grid(row=1,column=1,rowspan = 4)
Run Code Online (Sandbox Code Playgroud)

python tk-toolkit matplotlib

5
推荐指数
1
解决办法
6525
查看次数

如何在 Perl/Tk + AnyEvent 中停止 MainLoop

我正在编写使用 AnyEvent 计时器的 Perl/Tk 程序。如果计时器处于活动状态,我在关闭窗口时遇到问题。我做了这个窗口关闭处理程序:

$self -> {window} -> protocol( 'WM_DELETE_WINDOW' => sub {
                                                   undef $self -> {timer};
                                                   $self -> {window} -> destroy;
});
Run Code Online (Sandbox Code Playgroud)

如果关闭窗口时计时器处于活动状态,则计时器停止,窗口关闭,但 MainLoop 不会停止。怎么了?

perl tk-toolkit anyevent

5
推荐指数
1
解决办法
454
查看次数

如果小部件到达屏幕末尾,Python Tkinter 将小部件包装在框架中

Tk几何管理器是否有类似pack to new line的东西?我正在使用 pack 将小部件放在框架内。在高分辨率屏幕上,小部件适合并排查找。但是,如果将其放入较小的屏幕中,则小部件将在框架中耗尽空间。

基本上,我们从:

前

到:

后

您可以看到它如何切断我的处理器输入字段。相关代码:

options_frame = ttk.LabelFrame(
        parent_frame, text="Blast Options")
options_frame.pack(side=TOP, fill=X, expand=1, padx=5, pady=5)
        self._set_up_blast_options(options_frame)

def _set_up_blast_options(self, options_frame):
    self.evalue = Tkinter.DoubleVar()
    self.evalue.set(1)
    self.word_size = Tkinter.IntVar()
    self.word_size.set(4)
    self.penalty_mismatch = Tkinter.DoubleVar()
    self.penalty_mismatch.set(-4)
    self.min_d_match = Tkinter.IntVar()
    self.min_d_match.set(5)
    self.proc_count = Tkinter.IntVar()
    self.proc_count.set(cpu_count())

    # evalue
    e_value_label = ttk.LabelFrame(
        options_frame, text="e-Value Threshold")
    e_value_entry = ttk.Entry(e_value_label)
    e_value_entry.insert(0, self.evalue.get())
    e_value_entry.bind('<Return>', self._validate_e_value)
    e_value_entry.bind('<FocusOut>', self._validate_e_value)
    e_value_label.pack(side=LEFT, expand=1, pady=5, padx=5, fill=X)
    e_value_entry.pack(side=TOP, expand=1, pady=5, padx=5, fill=X)

    # word size
    word_size_label = ttk.LabelFrame(
        options_frame, text="Word Size") …
Run Code Online (Sandbox Code Playgroud)

python user-interface tk-toolkit tkinter ttk

5
推荐指数
1
解决办法
2405
查看次数

如何在 Tcl/Tk 中接收/处理多点触控输入?

我的目标是能够将笔记本电脑的触摸屏用作台式机的输入设备。

我理想的做法是在笔记本电脑上运行全屏 Tk 程序并接收触摸屏输入,并使用套接字将数据转发到桌面上的服务器,该服务器将使用 TWAPI 将输入转换为 Windows 事件。

不幸的是,Tk 似乎不能处理多点触控;据我所知,它将输入视为鼠标。我错了,还是事情就是这样?在 Tcl 中,此功能有什么好的选择吗?

tk-toolkit tcl multi-touch

5
推荐指数
0
解决办法
388
查看次数

替代 tkinter.dooneevent

我正在将一个程序(VMD,视觉分子动力学)移植到 Python 3.x,该程序是用 C++ 编写的,并且嵌入了 Python 和 TCL 解释器。其大部分 UI 是使用 TCL/TK 框架和 OpenGL 进行硬编码的,因此 UI 刷新是手动完成的。当 Python 解释器运行时,可以动态创建新窗口,甚至可以使用 Tkinter 将新菜单添加到主 UI。在这种情况下,所有 TK 事件都会通过定期调用 Python 端的一些代码来刷新(见下文)。这确保了所有更新都是线程安全的并且不会破坏解释器。

int PythonTextInterp::doTkUpdate() {
    // Don't recursively call into dooneevent - it makes Tkinter crash for
    // some infathomable reason.
    if (in_tk) return 0;
    if (have_tkinter) {
        in_tk = 1;
        int rc = evalString(
          "import Tkinter\n"
          "while Tkinter.tkinter.dooneevent(Tkinter.tkinter.DONT_WAIT):\n"
          "    pass\n"
        );
        in_tk = 0;
        if (rc) {
            return 1; // success
        }
        // give up …
Run Code Online (Sandbox Code Playgroud)

c++ python tk-toolkit tkinter python-3.x

5
推荐指数
1
解决办法
2648
查看次数

是否可以获得 tkinter 消息框图标图像文件?

我正在开发一个 python/tkinter 应用程序,发现默认消息框缺乏灵活性,我使用Toplevel. 我在重新创建消息框外观方面相当成功,但是,我找不到一种方法来获取正常 tkinter 消息框中显示的图标(即:错误、警告、信息图标...)

我做了一些研究,但没有找到太多,除了这些图像存储在 win32 DLL 文件中...还尝试查看 tkinter messagebox 模块代码,但它只是一个从 python 传输到 TCL 代码的接口,我找不到(而且可能无论如何也无法阅读......)

无论如何,是否可以PhotoImage使用 python 或 TCL 执行来获取这些图标的文件或粗略等效项(对象)Tk().tk.call()?或者任何其他(然后详细解释)方法来实现这一目标?

现在我能想到的最好的解决方案是使用屏幕截图,并将图标保存到文件中,但我宁愿能够访问原始图标......

提前致谢 !

python tk-toolkit tkinter python-3.x

5
推荐指数
1
解决办法
3327
查看次数

Tkinter 启动画面和主循环外的多处理

我已经实现了一个启动画面,当我的应用程序在启动时从远程云存储加载数据库时显示。启动画面通过调用 .update() 保持活动状态(上面有一个进度条),并在单独的加载过程结束后销毁。在此之后,主循环启动并且应用程序正常运行。

下面的代码曾经在我的 Mac 上使用 python 3.6 和 tcl/tk 8.5.9 运行良好。但是,在更新到 Sierra 之后,我被迫将 tk 更新到 ActiveTcl 8.5.18。现在,在单独的进程完成之前不会显示启动画面,但随后会与根窗口一起出现并停留在屏幕上(即使调用了它的 .destroy() 方法)。

import tkinter as tk
import tkinter.ttk as ttk
import multiprocessing
import time


class SplashScreen(tk.Toplevel):
    def __init__(self, root):
        tk.Toplevel.__init__(self, root)
        self.geometry('375x375')
        self.overrideredirect(True)

        self.columnconfigure(0, weight=1)
        self.rowconfigure(0, weight=1)

        self.label = ttk.Label(self, text='My Splashscreen', anchor='center')
        self.label.grid(column=0, row=0, sticky='nswe')

        self.center_splash_screen()
        print('initialized splash')

    def center_splash_screen(self):
        w = self.winfo_screenwidth()
        h = self.winfo_screenheight()
        x = w / 2 - 375 / 2
        y = h / 2 - …
Run Code Online (Sandbox Code Playgroud)

python tk-toolkit tkinter splash-screen multiprocessing

5
推荐指数
1
解决办法
1579
查看次数