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

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

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

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

Python

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

解決済

class1の中でinstance化したclass2の中でclass1のselfを使いたい場合

momey0709
momey0709

総合スコア4

Tkinter

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

Python

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

2回答

0評価

0クリップ

756閲覧

投稿2020/09/11 01:41

mycalendarのclassでinstance化して使用している
Win2のclassの中で
mycalendarのself定義しているdayを使用したいのですが、
どう書けばいいのかわかりません。
どなたかご教授願います。

python

# -*- coding:utf-8 -*- import tkinter as tk import datetime # カレンダーを作成するフレームクラス class mycalendar(tk.Frame): def __init__(self, master=None, cnf={}, **kw): "初期化メソッド" tk.Frame.__init__(self, master, cnf, **kw) # 現在の日付を取得 now = datetime.datetime.now() # 現在の年と月を属性に追加 self.year = now.year self.month = now.month # frame_top部分の作成 frame_top = tk.Frame(self) frame_top.pack(pady=5) self.previous_month = tk.Label(frame_top, text="<", font=("", 14)) self.previous_month.bind("<1>", self.change_month) self.previous_month.pack(side="left", padx=10) self.current_year = tk.Label(frame_top, text=self.year, font=("", 18)) self.current_year.pack(side="left") self.current_month = tk.Label(frame_top, text=self.month, font=("", 18)) self.current_month.pack(side="left") self.next_month = tk.Label(frame_top, text=">", font=("", 14)) self.next_month.bind("<1>", self.change_month) self.next_month.pack(side="left", padx=10) # frame_week部分の作成 frame_week = tk.Frame(self) frame_week.pack() button_mon = d_button(frame_week, text="Mon") button_mon.grid(column=0, row=0) button_tue = d_button(frame_week, text="Tue") button_tue.grid(column=1, row=0) button_wed = d_button(frame_week, text="Wed") button_wed.grid(column=2, row=0) button_thu = d_button(frame_week, text="Thu") button_thu.grid(column=3, row=0) button_fri = d_button(frame_week, text="Fri") button_fri.grid(column=4, row=0) button_sta = d_button(frame_week, text="Sat", fg="blue") button_sta.grid(column=5, row=0) button_san = d_button(frame_week, text="San", fg="red") button_san.grid(column=6, row=0) # frame_calendar部分の作成 self.frame_calendar = tk.Frame(self) self.frame_calendar.pack() # 日付部分を作成するメソッドの呼び出し self.create_calendar(self.year, self.month) def create_calendar(self, year, month): "指定した年(year),月(month)のカレンダーウィジェットを作成する" # ボタンがある場合には削除する(初期化) try: for key, item in self.day.items(): item.destroy() except: pass # calendarモジュールのインスタンスを作成 import calendar cal = calendar.Calendar() # 指定した年月のカレンダーをリストで返す days = cal.monthdayscalendar(year, month) # 日付ボタンを格納する変数をdict型で作成 self.day = {} # for文を用いて、日付ボタンを生成 for i in range(0, 42): c = i - (7 * int(i / 7)) r = int(i / 7) try: # 日付が0でなかったら、ボタン作成 if days[r][c] != 0: #日付ボタンを押下すると別ウィンドウを表示 self.day[i] = d_button(self.frame_calendar, text=days[r][c], command=self.createNewWindow) self.day[i].grid(column=c, row=r) except: """ 月によっては、i=41まで日付がないため、日付がないiのエラー回避が必要 """ break def change_month(self, event): # 押されたラベルを判定し、月の計算 if event.widget["text"] == "<": self.month -= 1 else: self.month += 1 # 月が0、13になったときの処理 if self.month == 0: self.year -= 1 self.month = 12 elif self.month == 13: self.year += 1 self.month = 1 # frame_topにある年と月のラベルを変更する self.current_year["text"] = self.year self.current_month["text"] = self.month # 日付部分を作成するメソッドの呼び出し self.create_calendar(self.year, self.month) #別ウィンドウを呼び出し関数 def createNewWindow(self): self.newWindow = tk.Toplevel(root) self.app = Win2(self.newWindow) # デフォルトのボタンクラス class d_button(tk.Button): def __init__(self, master=None, cnf={}, **kw): tk.Button.__init__(self, master, cnf, **kw) self.configure(font=("", 14), height=2, width=4, relief="flat") # 別ウィンドウクラス class Win2(tk.Frame): def __init__(self,master): super().__init__(master) self.pack() self.master.geometry("500x500") self.master.title("add schedule") self.today_schedule() #self.create_text() self.create_addbtn() self.create_clsbtn() def today_schedule(self): now = datetime.datetime.now() # 現在の年と月を属性に追加 self.year = now.year self.month = now.month if len(str(now.month)) == 2 else "0{}".format(now.month) self.day = now.day if len(str(now.day)) == 2 else "0{}".format(now.month) print("year={},month={},day={}".format(self.year, self.month, self.day)) yymmdd = "{}-{}-{}".format(self.year, self.month, self.day) print("yymmdd = {}".format(yymmdd)) import sqlite3 dbfile = sqlite3.connect('schedule.db') c = dbfile.cursor() c.execute("select * from cl_table") list = c.fetchone() self.ddmm = tk.Label(self.master, text=list[1]) self.schedule = tk.Label(self.master, text=list[2]) self.ddmm.place(x=150, y=50) self.schedule.place(x=250, y=50) # 別ウィンドウボタン表示 def create_addbtn(self): # Button self.button_quit = tk.Button(self.master,text="Add", command=self.quit_window) self.button_quit.place(x=420, y=450) # 別ウィンドウボタン表示 def create_clsbtn(self): # Button self.button_quit = tk.Button(self.master,text="Close", command=self.quit_window) self.button_quit.place(x=350, y=450) # 別ウィンドウclose関数 def quit_window(self): self.master.destroy() def create_text(self): self.schedule_input = tk.Entry(self.master) self.schedule_input.pack() # ルートフレームの定義 root = tk.Tk() root.title("Calendar App") mycal = mycalendar(root) mycal.pack() root.mainloop()

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Tkinter

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

Python

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