web-dev-qa-db-ja.com

python)のボタンでウィンドウを作成する方法

2つのボタンを持つウィンドウを作成する関数を作成するにはどうすればよいですか。各ボタンには指定された文字列があり、クリックすると指定された変数を返します。このビデオの@ 3:05に似ています https://www.khanacademy.org/science/computer-science-subject/computer-science/v/writing-a-simple-factorial-program---python -2 (これは非常に簡単な初心者プログラムのチュートリアルですが、見つけることができる唯一のビデオです)が、テキストボックスがなく、「OK」ボタンと「キャンセル」ボタンの機能をより細かく制御できます。 。

ウィンドウを作成し、その中に文字列を含む長方形を描画してから、マウスの動き/マウスのクリックをチェックするループを作成し、マウスの座標がボタンの1つに入ると、何かを返す必要がありますか?マウスがクリックされましたか?または、ボタンのあるウィンドウを簡単にする関数/関数のセットはありますか?またはモジュール?

5
user2874724

概要

いいえ、「長方形を描画してからループを作成する」必要はありません。 willがしなければならないことは、ある種のGUIツールキットをインポートし、そのツールキットに組み込まれているメソッドとオブジェクトを使用することです。一般的に、これらのメソッドの1つは、イベントをリッスンし、それらのイベントに基づいて関数を呼び出すループを実行することです。このループはイベントループと呼ばれます。したがって、このようなループを実行する必要がありますが、ループを作成する必要はありません。

警告

リンクしたビデオのようにプロンプ​​トからウィンドウを開くことを検討している場合、問題は少し難しくなります。これらのツールキットは、そのような方法で使用するようには設計されていません。通常、すべての入力と出力がウィジェットを介して行われる完全なGUIベースのプログラムを作成します。それは不可能ではありませんが、私の意見では、学習するときは、すべてのテキストまたはすべてのGUIに固執し、2つを混在させないようにする必要があります。

Tkinterを使用した例

たとえば、そのようなツールキットの1つはtkinterです。 Tkinterは、Pythonに組み込まれているツールキットです。 wxPython、PyQTなどの他のツールキットも非常によく似ており、同様に機能します。 Tkinterの利点は、おそらくすでにそれを持っていることであり、GUIプログラミングを学ぶための素晴らしいツールキットです。より高度なプログラミングにも最適ですが、その点に同意しない人もいます。それらに耳を傾けないでください。

これがTkinterの例です。この例はpython 2.xで機能します。python 3.xの場合、tkinterではなくTkinterからインポートする必要があります。

import Tkinter as tk

class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)

        # create a Prompt, an input box, an output label,
        # and a button to do the computation
        self.Prompt = tk.Label(self, text="Enter a number:", anchor="w")
        self.entry = tk.Entry(self)
        self.submit = tk.Button(self, text="Submit", command = self.calculate)
        self.output = tk.Label(self, text="")

        # lay the widgets out on the screen. 
        self.Prompt.pack(side="top", fill="x")
        self.entry.pack(side="top", fill="x", padx=20)
        self.output.pack(side="top", fill="x", expand=True)
        self.submit.pack(side="right")

    def calculate(self):
        # get the value from the input widget, convert
        # it to an int, and do a calculation
        try:
            i = int(self.entry.get())
            result = "%s*2=%s" % (i, i*2)
        except ValueError:
            result = "Please enter digits only"

        # set the output widget to have our result
        self.output.configure(text=result)

# if this is run as a program (versus being imported),
# create a root window and an instance of our example,
# then start the event loop

if __== "__main__":
    root = tk.Tk()
    Example(root).pack(fill="both", expand=True)
    root.mainloop()
9
Bryan Oakley

wxpython を見てください。これは、pythonの知識があれば、非常に簡単に開始できるGUIライブラリです。

次のコードは、ウィンドウを作成します( source ):

import wx

app = wx.App(False)  # Create a new app, don't redirect stdout/stderr to a window.
frame = wx.Frame(None, wx.ID_ANY, "Hello World") # A Frame is a top-level window.
frame.Show(True)     # Show the frame.
app.MainLoop()

これを見てください セクション (ボタンの作成方法)。ただし、 インストール手順 から始めてください。

0
Chigurh

tkinterはGUIライブラリであり、このコードは単純なテキストなしボタンを作成します。

 import tkinter as tk
 class Callback:
     def __init__(self, color):
         self.color = color
     def changeColor(self): 
         print('turn', self.color)
 c1 = Callback('blue')
 c2 = Callback('yellow')
 B1 = tk.Button(command=c1.changeColor) 
 B2 = tk.Button(command=c2.changeColor) 
 B1.pack()
 B2.pack()
0
Ieshaan Saxena
#Creating a GUI for entering name
def xyz():
    global a
    print a.get() 
from Tkinter import *
root=Tk()  #It is just a holder
Label(root,text="ENter your name").grid(row=0,column=0) #Creating label
a=Entry(root)           #creating entry box
a.grid(row=7,column=8)
Button(root,text="OK",command=xyz).grid(row=1,column=1)
root.mainloop()           #important for closing th root=Tk()

これが基本です。

0
Kunal Munjal