
「教えて!goo」は初めてなので、質問の仕方等、違和感があるかもしれませんがよろしくお願いします。
class Menu(Widget):
****"""Menu widget which allows displaying menu bars, pull-down menus and pop-up menus."""
****def __init__(self, master=None, cnf={}, **kw): #①
******* """Construct menu widget with the parent MASTER.
********Valid resource names: activebackground, activeborderwidth,
********activeforeground, background, bd, bg, borderwidth, cursor,
********disabledforeground, fg, font, foreground, postcommand, relief,
********selectcolor, takefocus, tearoff, tearoffcommand, title, type."""
********Widget.__init__(self, master, 'menu', cnf, kw) #②
上記は
https://github.com/python/cpython/blob/master/Li …
の中の2853行目から始まる記述なのですが、
①【master, cnf, kwはそれぞれ何を表しているのでしょうか?】
②'menu'には Valid resource names: の中に含まれる単語たちを指定するのだと思いますが、
「tearoff=False(←親切な回答者様に教わったもの)」
このように「=False(もしくは=Trueかな?)」を指定しています。
【「FalseまたはTrueを指定する」というルールは何を見て判断しているのでしょうか?】
よろしくお願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
ああ、もう一つ参考情報を。
Tkinterじゃないんですが、次のページにwxWidgetsの基本的な使い方が書いてあって、Pythonでも応用出来ます。
wxWidgets でクロスプラットフォーム GUIアプリを作ろう:
http://0xcc.net/pub/uu-2004-08/
これはC++での解説なんですが、キモは紹介されてる「wxGlade」と言う、やっぱりGUI Builderで、コイツもPythonコードを吐くんで、それを利用してwxWidgetsを使ったGUIのアプリが作成可能です。
参考までに。
No.3
- 回答日時:
ちと横レス気味ですが。
Tcl/Tkってのを知っていますか?
Tcl/Tkってのは今は亡きSun Microsystemsがサポートしていた「GUIを簡易に組み立てる為の」スクリプト言語で、実はPythonとは全く関係ありません。
TkinterってのはPythonからTcl/Tkを呼び出す為のライブラリなんですね。つまり「Pythonと全く関係がない」言語処理系をPythonから呼び出せるようになっています。
従って、このGUI部分ってのは「Python極めても」要するに関係ない部分なんですよ(笑)。
一応、Pythonの場合、公式にはGUI処理には「枯れてる」Tcl/Tkを使うようになっています。
が。
実は別にTcl/Tkを使いたくない、って場合、色々とGUI用のライブラリがあっちこっちで開発されて公開されています。
代表的なトコだと、
・wxPython: https://wxpython.org/
・PyQt: https://riverbankcomputing.com/software/pyqt/intro
・PySide: https://wiki.qt.io/PySide
なんかがありますね。
どれもPythonから「GUI作成用のツールを呼び出す」ように作られていて、wxPythonはwxWidgets( https://www.wxwidgets.org/ )、残り2つはQt( https://www1.qt.io/jp/ )とやり取りします。
とまぁここまで能書きなんですが。
ぶっちゃけた話、「GUIを手書きでゴリゴリ書こう」ってのはメンド臭くてしゃーないんですよ(笑)。
んじゃあ実際はどーするのか?
実はGUI Builderって種類のアプリケーションがあるんですね。GUI Builderってのは、それこそGUIでマウスでボタンとか選んでペタペタ貼っていく、Visual Basic等でお馴染みの「GUI作成ツール」です。
つまり、GUIの部分はそうやって「マウスで」作っていって、それが自動作成したファイルを「Python側で呼び出す」ってのがトレンディ(死語)なやり方なんです。
Tkinterの場合、調べてみたカンジ、最も簡単に導入出来るのがPygubu( https://github.com/alejandroautalan/pygubu )と言うツールです。YouTubeでGUIの作成法なんかを公開してるんで参考になるんじゃないかと思います。
Pygubu hello world program:
導入方法なんですが、Pythonにpip入ってるでしょうか?
Python の Windows へのインストールと pip の使い方:
http://yohshiy.blog.fc2.com/blog-entry-329.html
pipが入ってるなら
pip install pygubu
と言うコマンドで、pygubuが入手出来ます。Windowsの場合、
C:\Pythonインストールフォルダ\Scripts\pygubu-designer.bat
を起動すればPygubuが立ち上がります。
他にも、Tkinter用にはPAGE( http://page.sourceforge.net/ )と言うGUI Builderもあって、こっちは試してないんですが、YouTubeに使い方ガイドが挙げられたりしてて、これはこれで高機能の模様です。
PAGE Generator Python - Tkinter GUI Builder:
https://www.youtube.com/watch?v=oULe0h0Jl3g
参考までに。
No.2
- 回答日時:
○あなたが、本当に知りたいことは何ですか?
○あなたは、Tkの仕組みをどれくらい理解していますか?
○あなたは、Pythonの仕組みをどれくらい理解していますか?
このプログラムの動作を知りたいなら、
・Tkinterでウインドウや部品(ウィジェット)をどうやって配置させ、どうやって設定するか、の仕組み
・Pythonの基礎
が必要ですが、
・Tkinterの中身
は不要です。
root=tk.Tk()
は、
tk.Tkクラス (→ import で、tk はtkinterを指している) のオブジェクトを作ってrootという変数に納める
です。
tkinter.Tkクラスが中で何やっているか、そんなの気にする必要はありません。
大事なのは、これで、rootにTkの一番基礎になるウィンドウが用意されて、そこにいろんな部品を配置したりできるようになる、ということです。
続いて、 rootに、Menuウィジェットのmenubarを配置、menubarにはMenuウィジェットのfileとMenuウィジェットのeditを配置、それぞれの詳細な設定を行い、
root.mainloop()で実際の表示と、動作待ちのループになります。
tkinterモジュールの中を詳細に知りたいのなら、その前に、Pythonの中級以上の理解と、オブジェクト指向(と、それをPythonでどう実現しているか)の理解も必要です。
No.1
- 回答日時:
引数の渡し方には2種類あります。
・順番で指定する「位置引数」
・キーワード=値 の形で指定する「キーワード引数」
それを受け取る方も
・指定された位置に対応した値を受けとるもの
=で指定が無かったときのデフォルト値を指定できる。
キーワード引数としても受け取り可能
このinitの場合、master, cnf の2引数が、1番目、2番目の位置引数を受けとる
master=XXX とキーワード引数でも受け取れる
・↑で受け取れなかった位置引数を受け取るもの
*を付けて指定する。このinitには該当無し
・defの引数リストに存在しないキーワード引数を受け取るもの
** を付けて指定する。
{キーワード: 値} の辞書型になる。
kw が該当。
の3種類があります。
① ここにある文章からだけでは判断できません。
マニュアルを見てください。
https://infohost.nmt.edu/tcc/help/pubs/tkinter/w …
> o create a menu widget, you must first have created a Menubutton, which we will call mb:
> w = tk.Menu(mb, option, ...)
や、他の記述からすると、次のようになります。
master: 親ウィジェットを指定する
cnf: 辞書型にしたオプションを受けとる
kw: キーワード引数で指定されたオプションを受け取るための辞書
②
> 'menu'には Valid resource names: の中に含まれる単語たちを指定するのだと思いますが
違います。
Menuクラスの親クラス Widget のコンストラクタへと渡されています。
これは、Widgetの親クラス BaseWidgetのコンストラクを呼び出すことになります。
2280行目からの
def __init__(self, master, widgetName, cnf={}, kw={}, extra=()):
"""Construct a widget with the parent widget MASTER, a name WIDGETNAME
and appropriate options."""
を見れば
Menu.__init__の self→BaseWidget.__init__のself
Menu.__init__の master→BaseWidget.__init__のmaster
'menu' →BaseWidget.__init__のwidgetName
Menu.__init__の cnf→BaseWidget.__init__のcnf
Menu.__init__の kw→BaseWidget.__init__のkw
BaseWidget.__init__のextraは指定無し
と対応していることがわかります。
'menu' は、WidgetName として指定するものです。
他のウィジェットの定義から判断するに、ウィジェットの種類をあらわすものです。
ここを変えると、Menuウィジェットではなくなってしまいます。
Valid resource names は オプションとして有効なものです。
tearoff=False
と指定したなら、 kw={'tearoff':False} と、引数kwで受けとることになります。
どんなオプションが使えて、何が有効な値か、は先程のマニュアルに書いてあります。
マニュアルにはtearoff は1か0と書いてありますが、True=1,False=0として動作するのでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- 英語 ①普通名詞の所有格+②普通名詞で、①普通名詞に定冠詞の意味を付加したい場合の表現方法等について 23 2022/09/30 12:47
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP 共通の処理をまとめる方法がわからないのでアドバイスお願いします。 1 2022/12/19 20:20
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
4バイト整数を使っているため
-
「タイプ初期化子が例外をスロ...
-
「隣の芝生は青く見える」現象...
-
private static という変数の修飾
-
複数の変数を宣言する時、同時...
-
エクセルVBA 画像を貼り付ける...
-
範囲外の数値を代入したらエラ...
-
エクセルVBAで、条件に一致する...
-
恋愛
-
他のファイルの変数参照
-
0歳児の指しゃぶりに関して
-
VC++におけるCStringの変換
-
final修飾子を使っているのに、...
-
処理内容がほぼ同じメソッドの...
-
【sendkeysメソッドが動かずに...
-
VBA コピーが出来ません…!
-
(vba)他のアプリケーションの右...
-
C# インスタンスの破棄
-
インスタンス参照でアクセスで...
-
インスタンスを同じ名前で作成...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
4バイト整数を使っているため
-
DataGridで特定の行のスタイル...
-
LV_ITEM構造体のメンバlParamに...
-
VB2008にてWEBアプリケーション...
-
メニューの作成とイベント
-
MFCで水平スクロールバー
-
セットアップ先のPCでエラー
-
Varianntメモリリークについて
-
python3 各引数の意味と、引数...
-
DirectInputが上手く動きません;
-
DirectX C++/CLIで作成したDLL...
-
「タイプ初期化子が例外をスロ...
-
エクセルVBAで、条件に一致する...
-
エクセルVBA 画像を貼り付ける...
-
Excelで =EMBED("Acrobat Docu...
-
オブジェクト参照がオブジェク...
-
private static という変数の修飾
-
変数名の付け方
-
複数の変数を宣言する時、同時...
-
C#において、同じインスタンス...
おすすめ情報
回答ありがとうございます。
知識が足りず、3割程度しか理解できませんでした。
以下のコードのどこがどこに対応しているのか教えていただけると幸いです。
import tkinter as tk
root=tk.Tk()
#メニュー
menubar=tk.Menu(root)
root.configure(menu=menubar)
#メニューバーの設定
file=tk.Menu(menubar,tearoff=False)
edit=tk.Menu(menubar,tearoff=False)
menubar.add_cascade(label="File",underline=0,menu=file)
menubar.add_cascade(label="Edit",underline=0,menu=edit)
root.mainloop()
rootがWidgetで?
Tk()がBaseWidget?
いや絶対違うと思うのですが、よくわかりません…
回答ありがとうございます。
>>tkinterモジュールの中を詳細に知りたいのなら、その前に、Pythonの中級以上の理解と、オブジェクト指向(と、それをPythonでどう実現しているか)の理解も必要です。
モジュールの中を詳細に知るための知識をつけたいです。なのでPythonの中級以上になるための知識やオブジェクト指向(というのが何なのかもわたってないので)を理解するための知識をつけたいです。
>>それぞれの詳細な設定を行い
それぞれの詳細な設定をするための知識が無いので、サンプルコードを用いて、各記述がどういう意味を持っているのか・どのようなルールで記述されているのかを教えていただきたいと考えてます。