問題タブ [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 投票する
2 に答える
585 参照

perl - Perl Tkx エントリの検証が機能しない

テキスト検証が正しく機能しないという問題があります。基本的に、2 つのエントリ ボックスがあります。1 つは CVS のブランチの名前を入力するボックスで、もう 1 つはディレクトリ名を入力するボックスです。各ボックス内のテキストが変更されるたびに、そのテキストをプログラムで検証する必要があります。

GUI

これを行うには、オンラインのドキュメントでは、キーストロークによって入力ボックスの内容が変更されるたびに、「キー」オプションを使用して入力を検証するように指示されています。問題は、「キー」オプションを使用してプログラムを実行すると、入力ボックスに入力してもテキストが表示されないことです。

私のコードを以下に示します。

「キー」を別のもの (フォーカスアウトなど) に変更すると、正しく動作するように見えます。しかし、入力ボックスからフォーカスが外れたときだけでなく、キーストロークごとに検証することを本当に望んでいます。なぜこれが機能しないのですか?

0 投票する
1 に答える
231 参照

perl - GUI をブロックせずに Perl / Tkx で外部コマンドを実行する (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 投票する
1 に答える
116 参照

perl - tkx::open を使用して外部コマンドを実行しているときに stdout と stderr を取得する

GUIをブロックすることなく、Perl (Tkx モジュール) で Tk GUI から外部コマンドを実行することができました。

ただし、stderr と stdout からメッセージを取得するのは困難です。ほとんどのコマンドでは、変数$stdout$stderr.

私のコードには何が欠けていますか?

ありがとう

0 投票する
2 に答える
1048 参照

perl - Perl Tkx、「ボタン」と「ttk__button」の違いは何ですか?

私は Perl Tkx を使用して GUI に取り組んでおり、ボタンの作成に使用できる 2 つの別個の関数があることを発見しました。(buttonおよびttk__button)。

これまでのところ、私が見つけた唯一の違いは、button関数がテキストを中央揃えにしているようにttk__button見え、関数がテキストを左揃えにしているように見えることです。


使用例button

このスクリプトはテキストを中央揃えにします:

中央揃えのテキスト


使用例ttk__button

このスクリプトは、テキストを左揃えにします。

左揃えのテキスト


これらの 2 つの関数には他にどのような違いがあるのか​​、ボタンを作成する 2 つの別個の関数がある特定の理由があるのか​​ どうか疑問に思っていました。通常、これらのうちの 1 つは他のものよりも使いやすいですか?

ttk__buttonまた、関数を使用してテキストを中央揃えする方法はありますか?

編集:

Perl Tkx は本質的に Tcl から構築されているため、これに「Tcl」タグを追加しました。Perl はかなり得意ですが、Tcl に関しては初心者です。

一見するとそうは思えないかもしれませんが、これは実際には Perl の質問というよりも Tcl に関する質問なので、Tcl に詳しい方からの回答をお待ちしております。


ノート:

テキストを中央揃えにするttk__buttonには、次の行をコードに追加します。

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

0 投票する
1 に答える
755 参照

string - Tkx ラベルで使用する文字列の「幅」を取得する方法

Perl Tkx を使用して単純なアプリケーションを作成しており、ユーザーがディレクトリを選択できるようにしています。名前が長すぎる場合は、テキストの折り返しを使用したり、ボックスをばかげた長さに伸ばしたりしてディレクトリ名全体を表示するのではなく、名前を切り詰めて最後に「...」を追加したいと考えています。

問題は、ラベルの幅が任意の値 (40 など) に定義されていることです。この値がラベルに収まる文字数の測定値である場合、文字列を 37 に切り捨てて「...」を追加するだけで済みますが、そうではないようです。

-widthPerl Tkx を使用したラベルの実際の測定値を知っている人はいますか? -width文字列が占める単位の量を見つけるにはどうすればよいのでしょうか?


編集:

Tclマニュアルでこの回答を見つけました:

データベース クラス: 幅 ラベルの希望の幅を指定します。画像またはビットマップがラベルに表示されている場合、値は画面単位 (つまり、Tk_GetPixels で受け入れられる任意の形式) です。テキストの場合は文字です。

このオプションが指定されていない場合、ラベルの目的の幅は、表示されているイメージ、ビットマップ、またはテキストのサイズから計算されます。

これは、幅 40 でテキストを切り捨てるには、文字列を 37 文字に切り捨てて "..." を追加するだけでよいことを意味します。

ラベルをすべて「M」で埋めて、これをテストしました。通常、最も幅の広い文字であるため、「M」という文字を使用しました (こちら を参照)。37 個の "M" で切り捨てて末尾に "..." を追加するコードを書きましたが、約 24 個の "M" の後、"M" がラベルの末尾を超えてオーバーフローするようです。

これは、最も幅の広い文字の 40 文字に合わせてラベルを引き伸ばすだけであると想定するのは安全ではないことを意味します。したがって、私の質問にはまだ答えがありません。

文字列の「幅」を決定して、適切に切り捨てるにはどうすればよいですか?


EDIT2:

回避策を見つけましたが、探していた解決策ではありません。ラベルのテキストを等幅フォントに変更すると、正しく機能します。見栄えはよくないので、固定幅以外のフォントで機能するソリューションが本当に欲しいです。

0 投票する
1 に答える
256 参照

perl - 終了時に Perl コマンド ライン インタープリターがクラッシュする

TkxPerlスクリプトを終了すると Perl コマンド ライン インタープリターがクラッシュするという問題があります。

元:

このコードは、次の出力を生成します。

メインウィンドウ

「Hello」ボタンをクリックすると、main()サブルーチンが呼び出され、「TESTING」が出力されて終了が試行され、コマンド ライン インタープリターがクラッシュします。

エラーメッセージ

これはTkxスクリプトでのみ発生しているようで、MainLoopを呼び出す前にプログラムが既に に入っている場合にのみクラッシュしexitます。ここで何が起こっているか知っている人はいますか?


Perl のバージョン情報:

Perl バージョン