1

Python と tkinter を使い始めたばかりで、2 つの異なるオプション「SPMI」と「RFFE」を含む 2 つのコンボボックスと「実行」ボタンを備えた GUI を作成しました。スクリプトに実行させたいのは、さまざまなオプションを選択して [実行] をクリックすると、SPMI.py または RFFE.py ファイルを実行することです。

助けてください、ありがとう

私のコード:

import sys
from Tkinter import *



def callback1():
    os.system('SPMI.py')

def callback2():   
    os.system('RFFE.py')

class MyOptionMenu(OptionMenu):
     def __init__(self, master, status, *options):
          self.var = StringVar(master)
          self.var.set(status)
          OptionMenu.__init__(self, master, self.var, *options)
          self.config(font=('calibri',(10)),bg='white',width=12,fg='dark red')
          self['menu'].config(font=('calibri',(10)),bg='white',fg='dark blue')

          b1_1 = Button(Dragonfly, text = "Run", fg='blue',command=callback1)
          b1_1.place(x=85,y=150)


         b2_2= Button(Dragonfly, text = "Run", fg='blue',command=callback2)
         b2_2.place(x=275,y=150)


Dragonfly = Tk()
Dragonfly.geometry('400x400+400+300')
Dragonfly.title('Dragonfly')
mainlabel = Label(text='Dragonfly Trigger Test',font=('calibri',(14)),fg='dark blue').pack()


mymenu1 = MyOptionMenu(Dragonfly, 'Select Protocol', 'SPMI','RFFE')
mymenu2 = MyOptionMenu(Dragonfly, 'Select Protocol', 'SPMI','RFFE')
mymenu1.place(x=40,y=100)
mymenu2.place(x=230,y=100)
m1label = Label(text='Frame Trigger',font=('calibri',(12)),fg='dark green').place(x=57,y=60)
m1labe2 = Label(text='External Trigger',font=('calibri',(12)),fg='dark green').place(x=240,y=60)

Dragonfly.mainloop()
4

1 に答える 1

1

self.var.get()コンボボックスの値を取得するために使用します。次に、コールバック内でその値を使用して、コールバックの動作をコンボボックスの設定に依存させることができます。


import sys
from Tkinter import *
import subprocess

class MyOptionMenu(OptionMenu):
    def __init__(self, master, status, *options):
        self.var = StringVar(master)
        self.var.set(status)
        OptionMenu.__init__(self, master, self.var, *options)
        self.config(
            font=('calibri', (10)), bg='white', width=12, fg='dark red')
        self['menu'].config(font=('calibri', (10)), bg='white', fg='dark blue')

    def callback(self):
        val = '{}.py'.format(self.var.get())
        print(val)
        # subprocess.call([val])

Dragonfly = Tk()
Dragonfly.geometry('400x400+400+300')
Dragonfly.title('Dragonfly')
mainlabel = Label(text='Dragonfly Trigger Test', font=('calibri', (14)),
                  fg='dark blue').pack()

mymenu1 = MyOptionMenu(Dragonfly, 'Select Protocol', 'SPMI', 'RFFE')
b1_1 = Button(Dragonfly, text="Run", fg='blue', command=mymenu1.callback)
b1_1.place(x=85, y=150)

mymenu2 = MyOptionMenu(Dragonfly, 'Select Protocol', 'SPMI', 'RFFE')
b2_2 = Button(Dragonfly, text="Run", fg='blue', command=mymenu2.callback)
b2_2.place(x=275, y=150)

mymenu1.place(x=40, y=100)
mymenu2.place(x=230, y=100)
m1label = Label(text='Frame Trigger', font=('calibri', (12)),
                fg='dark green').place(x=57, y=60)
m1labe2 = Label(text='External Trigger', font=('calibri', (12)),
                fg='dark green').place(x=240, y=60)

Dragonfly.mainloop()

ところで、 で GUI を作成するのplaceは最初は簡単ですが、最終的には面倒です。1 つには、新しいウィジェットを挿入するには、ハードコーディングされた座標をいたるところでいじる必要があるため、レイアウトを変更するのがますます難しくなります。もう 1 つの問題は、ウィンドウ サイズの変更に合わせてウィジェットのレイアウトを調整できないことです。

これらの理由から、人々はウィジェットを使用packまたはレイアウトする傾向があります。grid

import sys
import Tkinter as tk
import subprocess

class MyOptionMenu(tk.OptionMenu):
    def __init__(self, master, status, *options):
        self.var = tk.StringVar(master)
        self.var.set(status)
        tk.OptionMenu.__init__(self, master, self.var, *options)
        self.config(
            font=('calibri', (10)), bg='white', width=12, fg='dark red')
        self['menu'].config(font=('calibri', (10)), bg='white', fg='dark blue')

    def callback(self):
        val = '{}.py'.format(self.var.get())
        print(val)
        # subprocess.call([val])

Dragonfly = tk.Tk()
Dragonfly.geometry('400x400+400+300')
Dragonfly.title('Dragonfly')
Dragonfly.columnconfigure(0, weight=1)
Dragonfly.columnconfigure(1, weight=1)  
mainlabel = tk.Label(text='Dragonfly Trigger Test', font=('calibri', (14)),
                  fg='dark blue').grid(row=0, column=0, columnspan=2, pady=20)

mymenu1 = MyOptionMenu(Dragonfly, 'Select Protocol', 'SPMI', 'RFFE')
mymenu1.grid(row=2, column=0, pady=10, padx=10,)
b1_1 = tk.Button(Dragonfly, text="Run", fg='blue', command=mymenu1.callback)
b1_1.grid(row=3, column=0, pady=10, padx=10,)

mymenu2 = MyOptionMenu(Dragonfly, 'Select Protocol', 'SPMI', 'RFFE')
mymenu2.grid(row=2, column=1, pady=10, padx=10,)
b2_2 = tk.Button(Dragonfly, text="Run", fg='blue', command=mymenu2.callback)
b2_2.grid(row=3, column=1, pady=10, padx=10,)

m1label = tk.Label(text='Frame Trigger', font=('calibri', (12)),
                fg='dark green').grid(row=1, column=0, pady=10, padx=10,)
m1labe2 = tk.Label(text='External Trigger', font=('calibri', (12)),
                fg='dark green').grid(row=1, column=1, pady=10, padx=10,)

Dragonfly.mainloop()
于 2013-10-12T13:16:04.203 に答える