问题标签 [tkx]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
129 浏览

perl - Perl Tkx 菜单“-underline”似乎无法正常工作

我一直在关注Tkx::Tutorial来尝试学习如何使用 Perl 制作 GUI。我到了它有一个如何创建菜单并遵循它的示例的部分。除了一项功能外,它几乎完全正确。这些-underline部分似乎无法正常工作。

-underline => 0应该在菜单文本的第一个字符下划线,并允许您使用第一个字母作为键盘快捷键,而不必单击它。

代码如下所示:

此代码将创建以下窗口:

窗口 1

使用“F”作为键盘快捷键无法打开文件菜单,使用“H”无法打开帮助菜单

窗口 2

(注意“New”函数目前什么都不做,所以对它的调用被破坏了。现在应该是这种方式,所以忽略它。)

单击“文件”菜单后,将打开第二个菜单。在这里,键盘快捷键似乎可以工作,“N”和“E”将执行它们相应的命令,但它们仍然没有正确加下划线。

为什么这不按他们应该的方式工作?

0 投票
2 回答
585 浏览

perl - Perl Tkx 条目验证不起作用

我在让我的文本验证正常工作时遇到问题。基本上我有 2 个输入框,一个用于输入 CVS 中的分支名称,另一个用于输入目录名称。我希望我的程序在更改每个框中的文本时对其进行验证。

图形用户界面

为此,在线文档说,只要击键更改了输入框的内容,就使用“key”选项来验证输入。问题是,当我使用“key”选项然后运行程序时,当我在输入框中键入时,没有出现任何文本。

我的代码如下所示:

如果我将“key”更改为其他内容(如 focusout),它似乎可以正常工作。但我真的希望它在每次击键后进行验证,而不是仅在焦点从输入框中取出时进行验证。为什么这不起作用?

0 投票
1 回答
211 浏览

perl - 循环在 Perl / Tkx 中定义按钮

我正在尝试通过循环使用 Tkx 在 Perl 中定义一系列按钮;每个按钮的文本和操作都在哈希表数组中定义。

但是,无论我点击哪个按钮,都只会触发最后一个按钮的动作。

这是我使用的代码。

0 投票
1 回答
231 浏览

perl - 在 Perl / Tkx 中运行外部命令而不阻塞 GUI (Windows)

我正在尝试使用 Perl + Tkx 创建一个界面,该界面可以在单击按钮时运行外部命令。

有很多关于如何使用 Tk 模块的文档,但很少使用 Tkx。

我仍然找到了一些这样的但我无法使其适用于我的示例。特别是这些帖子包括 Tkx::open、Tkx::configure 和 Tkx::fileevent 的使用......但我还没有想出如何将它们组合在一起。

这是我正在尝试的代码;当单击按钮并按下一个键终止子进程时,Perl 崩溃并出现错误Free to wrong pool 16389d0 not 328e448 at C:/Perl/lib/Tcl.pm line 433.

注意:我使用的是 ActivePerl 5.12.2。

谢谢

0 投票
2 回答
351 浏览

perl - 使用 Perl Tkx 处理错误

我正在开发一个 Perl Tkx 应用程序,但无法获取有用/正确的错误消息。我正在尝试使用 croak,所以它会准确地告诉我失败的位置,但每次它发出 croak 时,它只会说错误位于“C:/Perl64/lib/Tkx.pm 第 347 行”。

我编写了一个非常简单的脚本来演示正在发生的事情:



当我运行此脚本并单击按钮时,我得到以下弹出框:

呱呱弹窗

如何让 Tkx 处理类似于在常规 Perl 脚本中使用 croak 的错误?有没有办法强制呱呱打印到 STDOUT 或 STDERR?


编辑:

Michael Carman 提出了一个很好的观点,即通常使用 GUI 控制台将被抑制,用户永远不会看到发送到 STDOUT 或 STDERR 的错误,但是如何找到一种方法来修改“应用程序错误”对话框中的文本以说点有用的?那可能吗?

文本不一定对最终用户有用,但至少应该是程序员可以理解的,这样当最终用户报告问题时,他们知道在哪里寻找问题。


编辑2:

好的,似乎使用dieorconfess代替croak会向“应用程序错误”窗口打印更有用的错误消息,但是一旦我单击“确定”,程序就会继续运行并且实际上并没有死。我怎样才能“杀死它直到它死去”并确保它保持死亡状态?


可能的解决方案:

这是基于迈克尔·卡曼(Michael Carman)的回应的可能解决方案。我稍微修改了一下,因为我认为 messageBox 看起来更好一点:)

到目前为止,这是最好的解决方案,但赏金还剩 5 天,所以请继续提供这些答案!

0 投票
1 回答
116 浏览

perl - 在使用 tkx::open 运行外部命令时检索标准输出和标准错误

我已经设法在 Perl(Tkx 模块)中从 Tk GUI 运行外部命令,而不会阻塞 GUI

但是,我很难从 stderr 和 stdout 检索消息:对于大多数命令,没有任何内容存储在变量$stdout$stderr.

我的代码中缺少什么?

谢谢

0 投票
2 回答
1048 浏览

perl - Perl Tkx,“按钮”和“ttk__button”有什么区别?

我一直在使用 Perl Tkx 开发 GUI,并发现有两个单独的函数可以用来创建按钮。(buttonttk__button)。

到目前为止,我发现的唯一区别是该button函数似乎使文本居中对齐,而该ttk__button函数似乎使文本左对齐。


使用示例button

此脚本将使文本居中:

居中文本


使用示例ttk__button

此脚本将左对齐文本:

左对齐文本


我想知道这两个函数之间还有什么其他区别,以及是否有任何特殊原因有两个单独的函数可以创建按钮。其中一个通常比另一个更好用吗?

还有什么方法可以使用该ttk__button函数来居中对齐文本?

编辑:

我为此添加了“Tcl”标签,因为 Perl Tkx 本质上是由 Tcl 构建的。我对 Perl 非常熟悉,但在 Tcl 方面我还是个新手。

虽然乍一看可能不像,但实际上这更像是一个 Tcl 问题而不是 Perl 问题,所以我很想听听有 Tcl 经验的人的回答。


笔记:

要将文本居中ttk__button添加到您的代码中:

Tkx::ttk__style_configure('TButton', -justify => 'center');

0 投票
1 回答
755 浏览

string - 如何获取要在 Tkx 标签中使用的字符串的“宽度”

我正在使用 Perl Tkx 制作一个简单的应用程序,并允许用户选择一个目录。如果名称太长,我想截断它并将“...”附加到末尾,而不是使用文本换行或将框拉伸到荒谬的长度来显示整个目录名称。

问题是标签的宽度被定义为任意值(如 40)。如果这个值是标签可以容纳多少个字符的度量,我可以将字符串截断为 37 并附加“...”,但情况似乎并非如此。

有谁知道-width使用 Perl Tkx 的标签实际上是什么?如何找到-width我的字符串将占用的单位数量,以便找出截断它的适当点?


编辑:

我在tcl 手册中找到了这个答案:

数据库类:宽度 指定标签的所需宽度。如果在标签中显示图像或位图,则该值以屏幕为单位(即 Tk_GetPixels 可接受的任何形式);对于文本,它是字符。

如果未指定此选项,则标签的所需宽度是根据其中显示的图像或位图或文本的大小来计算的。

这应该意味着对于 40 的宽度来截断文本,我只需要将字符串截断为 37 个字符并添加“...”。

我通过用所有“M”填充标签来测试这一点。我使用了字母“M”,因为它通常是最宽的字符(见这里)。我编写了代码以在 37 个“M”处截断并在末尾添加“...”,但在大约 24 个“M”之后,“M”似乎溢出标签的末尾。

这意味着假设它只是将标签拉伸以适应最宽的 40 个字符是不安全的……因此我的问题仍未得到解答。

如何确定字符串的“宽度”,以便适当截断它?


编辑2:

我找到了一种解决方法,但它仍然不是我正在寻找的解决方案。如果您将标签上的文本更改为固定宽度的字体,它将正常工作。虽然它看起来不太好,所以我真的很想要一个适用于非固定宽度字体的解决方案。

0 投票
0 回答
177 浏览

perl - 将 Tkx::tk___chooseDirectory() 搜索限制为特定目录

Tkx::tk___chooseDirectory()我有一个允许用户选择目录的 Perl 脚本。

问题是只有少数特定目录对脚本将要执行的操作有效。有没有办法限制此功能显示的文件夹只显示特定子目录下的文件夹?


例子:

目录列表

假设我只想让用户选择“Perl64”或其任何子目录。如何强制它隐藏其他文件夹(如“PerfLogs”或“Program Files”)并仅显示有效文件夹。

我知道我可以使用该-initialdir选项使其从“Perl64”开始,但这并没有隐藏其他选择。

0 投票
1 回答
256 浏览

perl - Perl 命令行解释器在退出时崩溃

我有一个问题,退出 PerlTkx脚本会导致 Perl 命令行解释器崩溃。

前任:

此代码生成以下输出:

主窗口

单击“Hello”按钮调用main()打印“TESTING”的子例程,然后尝试退出并使命令行解释器崩溃:

错误信息

这似乎只发生在Tkx脚本中,并且只有在程序已经进入MainLoop调用之前才会崩溃exit。有谁知道这里发生了什么?


Perl 版本信息:

Perl 版本