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

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

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

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

Python

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

Q&A

解決済

1回答

349閲覧

python Tkinter テキストボックスを90度回転させて表示する方法

Taro0827

総合スコア16

Tkinter

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

Python

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

0グッド

1クリップ

投稿2024/12/09 04:00

編集2024/12/09 08:39

実現したいこと

・python Tkinterでテキストボックスを90度回転させて表示する方法はあるでしょうか。
・Tkinterにこだわりはなく、別のデスクトップアプリがあればそちらで開発したいと考えております。

該当のソースコード

ソースコード

import tkinter as tk
from tkinter import ttk
import xlwings as xw
from PIL import Image

root = tk.Tk()
root.title("Select and Draw Rectangle")

Canvasウィジェットを作成

canvas = tk.Canvas(root, width=1200, height=850, bg="white")
canvas.pack()

txtbox = ttk.Entry(width=10)
txtbox.place(x=100, y=200)

root.mainloop()

試したこと

ここに問題に対して試したことを記載してください。
Tkinterではなく、別のアプリでも構いません。イメージ説明

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Entry ではなく、テキストであれば回転可能です。

python

1canvas.create_text((100, 200), text="H.900", angle=90)

create_window でウィジェットをキャンバス内に配置できますが、
残念ながら create_windowには angle 指定はできません。
ctypes で無理やり何とかする方法がなくはないですが、プラットフォーム依存で難易度:高

妥協案として、tkinter で実装するなら、StringVar や IntVar で変数を作成し
Entry 入力に応じて、Canvas のテキストに反映する方法です

python

1import tkinter as tk 2 3# 変更点: 4# - Entry を 画面外に配置 (機能は残しつつも非表示) 5# - テキストクリック時に Entry にフォーカスを移す 6# - (テキストのフォントサイズ調整) 7 8# 課題 9# - Tab で 入力欄を遷移したときに、隠し Entry が含まれる 10# - 矢印キー操作時、編集中のカーソルが見えない 11 12def main(): 13 root = tk.Tk() 14 heightVar = tk.IntVar(root, value=900) 15 canvas = tk.Canvas(root, width=600, height=600) 16 entry = tk.Entry(root, width=10, textvar=heightVar) 17 entry.place(x=-10000, y=-10000) 18 19 canvas.pack(fill=tk.BOTH, expand=True) 20 item = canvas.create_text((100, 200), text="900", angle=90, font=("",30)) 21 22 def _update_text(*args): 23 value = heightVar.get() 24 canvas.itemconfigure(item, text=f"H. {value}") 25 26 canvas.tag_bind(item, "<Button-1>", lambda _: entry.focus()) 27 28 heightVar.trace("w", _update_text) 29 30 root.mainloop() 31 32if __name__ == '__main__': 33 main()

他環境で入力可能で90度回転だと、
簡単な方法は HTML/CSS の form input 入力欄で可能です。

html

1<!DOCTYPE html> 2<html> 3<head> 4 <title>Roate field demo</title> 5 <style> 6 input#cell { 7 margin-top: 100px; 8 transform: rotate(-90deg); 9 } 10 </style> 11</head> 12<body> 13 <form> 14 <input id="cell" 15 value="900" 16 /> 17 </form> 18</body> 19</html>

動作DEMO (Qt/Kivy/Tkinter)

イメージ説明

投稿2024/12/10 07:02

編集2024/12/11 15:48
teamikl

総合スコア8791

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

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

Taro0827

2024/12/11 05:13

コメントありがとうございます。 もちろんこの方法は考えておりましたが、テキストボックスが90度回転できればなおよい とのことで、質問させていただきました。 こちらの方向ですすめていきます。
teamikl

2024/12/11 06:25

枠やカーソル等を少し作り混む必要があるけど、上記の tkinter のコードでもう少し改良案、 Entry を画面外の見えない場所に配置し、テキストクリック時に Entry にフォーカスを移すと、 キー入力がテキストに即時反映されるので、目的の挙動に近いことを出来るかもしれないです。 ちなみに、Python の他の GUI ライブラリでは Qt や kivy ではテキストボックスの回転は可能でした。
Taro0827

2024/12/11 08:47

これはすごい!!!! 大変申し訳無いですが、Tkinterでどのようにやったのか、詳しくおしえていただけないでしょうか。 お手数をおかけしますが、よろしくお願いいたします。
teamikl

2024/12/11 16:06 編集

回答のコードを反映しました。内容は先の説明通り、主な変更は2点。 後は、編集中であることを示すために視覚効果あったほうがいいかなとか、 細かい点は必要に応じて作り混まないといけないですね。課題: UI 部分が再利用できない 他のライブラリの実装は、検索用ヒントのみ残しておくと、 Qt は GraphicsProxyWidget/QTransform, Kivy では Scatter を使って実装。(20-30行規模)
Taro0827

2024/12/12 02:33

ありがとうございます。 一度やってみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.34%

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

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

質問する

関連した質問