質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2009閲覧

ラジオボタンをクラスに入れたい

bell-chako

総合スコア12

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/02/07 22:35

編集2019/02/08 00:21

pythonを始めたばかりの初心者です。Tkinterを使いシステ厶を作っています。
ラジオボタンとスライダーを別々の製作したのですが、この2つを1つにまとめることが出来ません。クラスの構成がいまいちよく理解しておりませんので、その点でつまずいております。自分なりに色々調べてみましたが解決出来る自信がありませんのでご質問させていただきました。勉強不足&初歩的な質問で申し訳ありませんがアドバイスをよろしくおねがいいたします。
button_Ru=tk.Radiobutton(value=0,bg='#6499ef').grid(column=1, row=2, padx=(45,30),pady=(45,8))
tk.Label(text="Run",fg="white",bg="#014cc4",font=("",13,"bold")).grid(column=1, row=3, padx=(10,5),pady=(5,5))

button_Re=tk.Radiobutton(value=1,bg='#6499ef').grid(column=2, row=2,padx=(30,30), pady=(45,8))
tk.Label(text="Record",fg="white",bg="#014cc4",font=("",13,"bold")).grid(column=2, row=3, padx=(0,5),pady=(5,5))

button_P=tk.Radiobutton(value=2,bg='#6499ef').grid(column=3, row=2, padx=(25,30), pady=(45,8))
tk.Label(text="Program",fg="white",bg="#014cc4",font=("",13,"bold")).grid(column=3, row=3,padx=(0,5),pady=(5,5))

上記のコードを下記のクラスに入れたいのですが自分なりにコードを入れてみてもボタンが表示されません。

import tkinter as tk
import tkinter
from tkinter import *
from tkinter import font

root = tk.Tk()
root.title("screen2")
root.geometry("320x240")
root.configure(width = 320, height=240,bg='#014cc4')
frame = tk.Frame(root)

class Application(Frame):
def init(self, master):
Frame.init(self, master)
self.grid()
self.create_widgets()

class Ex(Frame):

def __init__(self, *args): super().__init__(*args) Pack.config(self) self.createWidgets() def createWidgets(self): self.slider = Scale( self, name = "slider", from_ = -30, to =30 , orient = HORIZONTAL, length = "8cm", label = "Slider", command = self.update, ) for name, text, command in [ ("minButton" , '|<' , self.reset_min ), ("leftButton" , '<<' , self.skip_left ), ("rightButton", '>>' , self.skip_right), ("maxButton" , '>|' , self.reset_max ), ("quitButton" , 'Set', self.quit ), ]: setattr(self, name, Button( self, name = name, text = text, command = command, )) self.grid(pady=(150,0),padx=(5,0)) self.slider.pack(side=TOP) self.minButton.pack(padx=(30,5),side = LEFT) self.leftButton.pack(padx=(0,5),side = LEFT) self.rightButton.pack(padx=(0,5),side = LEFT) self.maxButton.pack(padx=(0,5),side = LEFT) self.quitButton.pack(padx=(0,10),side = LEFT) def update(self, val): self.slider["label"] = "Slider value: %s"%val def min(self): return self.slider["from"] def max(self): return self.slider["to"] def value(self): return self.slider.get() def reset_min(self): value = self.min() self.slider.set(value) def skip_left(self): value = max(self.value()-5, self.min()) self.slider.set(value) def skip_right(self): value = min(self.value()+5, self.max()) self.slider.set(value) def reset_max(self): value = self.max() self.slider.set(value)

----------------------------------------

def example(*args):
ex = Ex()
ex.mainloop()

----------------------------------------

if name=='main':
example()
root.mainloop()

ここに言語を入力
コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

firedfly

2019/02/07 23:27

こんにちは。 その内容なら、もっと少ないコードで質問できるのではないでしょうか。 必要十分なコードで、 〇〇したいのだけど✕✕になると書いて頂けると 一瞬で答えられることが多いです。
bell-chako

2019/02/08 00:24

わかりずらくてすみませんでした。こういったところで質問させていただくのも初めてなのでどこまでコードを書いていいのか分からずにすべてのものを載せてしまいました。
firedfly

2019/02/08 01:11

コードすべてを載せて頂けるのは非常にありがたいです。 が、長いコードすべてを読まないと回答できないのは辛いものがあります。 質問者の意図を探るのも、問題の原因を考えるのも、正解を構築するのも、長いほど大変になるので。
wwbQzhMkhhgEmhU

2019/02/08 03:03

初心者と言ってる人に整理を促すのはともかく、短いコードを要求するのはどうかと思います。 コピペでそのまま動作確認できるのがベストなので、貼れる限り長いコードで全然問題ありません。 そんなことより、コードの内容を選択して、上部バーcodeボタンを使ってインデントを残してください。 インデントが違っていると動かないので。
firedfly

2019/02/08 15:34

もう少し自分で整理できないと 答えを教えても理解できなかろうと思ったのですが、 ちょっと高望みしすぎでしたかね……。
guest

回答1

0

ベストアンサー

単に2つのサンプルコードを持ってきた感じですかね。

ちょっとみてみましたが

  • ラジオボタン側は手続き型で書かれており、スライダー側はクラスを使って書かれている
  • ラジオボタン側はレイアウトマネージャーにgrid()を使っており、スライダー側はpack()を使っている。

等などあり、本来であればどのような方向性でマージしたいのかを決める必要がありそうですが、とりあえず

  • クラスを使用
  • レイアウトマネージャは grid() を使用

にてマージしてみました。
できるだけ難しそうな記述は避け必要最低限のコードになるようにしましたので参考にしてみてください。

Python

1import tkinter as tk 2from tkinter import font 3 4class Application(tk.Frame): 5 def __init__(self, master): 6 super().__init__(master) 7 self.pack() 8 self.createWidgets() 9 10 def createWidgets(self): 11 ### 各Widgetを生成 ### 12 13 # ラジオボタンを生成 14 self.button_Ru = tk.Radiobutton(self, value=0) 15 self.button_Re = tk.Radiobutton(self, value=1) 16 self.button_P = tk.Radiobutton(self, value=2) 17 # ラジオボタン用のラベルを生成 18 self.label_Ru = tk.Label(self, text="Run", font=("", 13, "bold")) 19 self.label_Re = tk.Label(self, text="Record", font=("", 13, "bold")) 20 self.label_P = tk.Label(self, text="Program", font=("",13,"bold")) 21 # スライダーを生成 22 self.slider = tk.Scale(self, from_=-30, to=30, orient=tk.HORIZONTAL, length="8cm", label="Slider", command=self.update) 23 # スライダー制御用ボタンを生成 24 self.minButton = tk.Button(self, text='|<', command=self.reset_min) 25 self.leftButton = tk.Button(self, text='<<', command=self.skip_left) 26 self.rightButton = tk.Button(self, text='>>', command=self.skip_right) 27 self.maxButton = tk.Button(self, text='>|', command=self.reset_max) 28 self.quitButton = tk.Button(self, text='Set', command=self.quit) 29 30 ### 各Widgetsを配置 ### 31 # 各Widgetを(4行、5列)のグリッドのどの位置に配置するかを記述 32 33 # ラジオボタンを配置 34 self.button_Ru.grid(row=0, column=0) 35 self.button_Re.grid(row=0, column=2) 36 self.button_P.grid(row=0, column=4) 37 # ラジオボタン用のラベルを配置 38 self.label_Ru.grid(row=1, column=0) 39 self.label_Re.grid(row=1, column=2) 40 self.label_P.grid(row=1, column=4) 41 # スライダーを配置 42 self.slider.grid(row=2, column=0, columnspan=5, sticky='NSEW') 43 # スライダー制御用ボタンを配置 44 self.minButton.grid(row=3, column=0, sticky='NSEW') 45 self.leftButton.grid(row=3, column=1, sticky='NSEW') 46 self.rightButton.grid(row=3, column=2, sticky='NSEW') 47 self.maxButton.grid(row=3, column=3, sticky='NSEW') 48 self.quitButton.grid(row=3, column=4, sticky='NSEW') 49 50 def update(self, val): 51 self.slider["label"] = "Slider value: %s"%val 52 53 def min(self): 54 return self.slider["from"] 55 56 def max(self): 57 return self.slider["to"] 58 59 def value(self): 60 return self.slider.get() 61 62 def reset_min(self): 63 value = self.min() 64 self.slider.set(value) 65 66 def skip_left(self): 67 value = max(self.value()-5, self.min()) 68 self.slider.set(value) 69 70 def skip_right(self): 71 value = min(self.value()+5, self.max()) 72 self.slider.set(value) 73 74 def reset_max(self): 75 value = self.max() 76 self.slider.set(value) 77 78if __name__=='__main__': 79 root = tk.Tk() 80 root.title("screen2") 81 root.geometry("320x240") 82 root.configure(width = 320, height=240 ,bg='#014cc4') 83 app = Application(root) 84 app.mainloop()

投稿2019/02/08 04:59

magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bell-chako

2019/02/08 08:11

わかりやすくまとめていただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問