[Python] pyenv管理アプリ v0.0.2 Pythonバージョン変更

pyenvのPythonバージョン変更機能を追加しました。

Entryウィジェットなどにデフォルトではプレースホルダー(入力を誘導するための薄い字)を置けないそうです。そのうちプレースホルダー作成クラスを書きたいです。

なるべくキーボードではなくマウスで処理したい派なのでこのようなコマンドを覚えずに済むツールを作るのは実に楽しいです。

次はスクロールバーの追加になります。

import subprocess,datetime,os
import tkinter as tk
import tkinter.font as font
from tkinter import ttk

# 16進数カラーコード
# #EDFFBE #C2EEFF #7B3CFF

class FrameA(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.configure(background = '#EDFFBE')
        self.grid(row=1,column=1, sticky=tk.NSEW, padx=5, pady=5)

def version_check():
    proc = subprocess.run("pyenv versions", shell=True, stdout= subprocess.PIPE, stderr = subprocess.PIPE)
    return proc.stdout

def version_change(num):
    print(num)
    cmd = f"pyenv global {num}"
    subprocess.run(cmd, shell=True, stdout= subprocess.PIPE, stderr = subprocess.PIPE)
    proc = subprocess.run("pyenv versions", shell=True, stdout= subprocess.PIPE, stderr = subprocess.PIPE)
    return proc.stdout

# ウィンドウ設定
root = tk.Tk()
root.title("PYENV MANAGER v0.0.2")
root.geometry("415x330")
root.configure(bg='#EDFFBE')
style = ttk.Style()
style.theme_use('classic')
style.configure("MyWidget.TButton", gripcount=0,
                background="#7B3CFF", foreground="#EEFFFF",darkcolor='#7B3CFF', lightcolor="LightGreen",
                troughcolor="gray", bordercolor="gray", arrowcolor="white")
style.configure("MyWidget2.TButton", gripcount=0,
                background="#ffe4b5", foreground="#556b2f",darkcolor='#ffe4b5', lightcolor="LightGreen",
                troughcolor="gray", bordercolor="gray", arrowcolor="white")

# フォント設定
my_font = font.Font(root,family="System",size=18,weight="normal")
my_font2 = font.Font(root,family="System",size=16,weight="normal")
my_font3 = font.Font(root,family="System",size=14,weight="normal")

# Frame設定
frame = tk.Frame(root,background = '#EDFFBE')
frame.grid(row=0,column=0, sticky=tk.NSEW, padx=5, pady=10)
frameA = FrameA(master=frame)

# Entry設定
entry = tk.Entry(frame,width=25,background = '#C2EEFF',foreground = '#8b0000',font=my_font3)
entry.insert(tk.END, 'バージョン番号 or ライブラリ名') 
entry.grid(row=0,column=0,sticky=tk.W)

# Text設定
text = tk.Text(frame,height=20,width=40,background = '#C2EEFF',foreground = '#8b0000')
text.grid(row=1,column=0,pady=10,sticky=tk.W)

# Button設定
btn = ttk.Button(frame, text="クリア",command=lambda:entry.delete(0,tk.END),width=8,style= 'MyWidget2.TButton')
btn.grid(row=0,column=1,sticky=tk.W,padx=5)

btnA = ttk.Button(frameA, text="Python確認",command=lambda:text.insert(tk.END,version_check()),width=8,style= 'MyWidget.TButton')
btnA.pack(padx=5,pady=5,side=tk.TOP)

btnB = ttk.Button(frameA, text="Python変更",command=lambda:text.insert(tk.END,version_change(str(entry.get()))),width=8,style= 'MyWidget.TButton')
btnB.pack(padx=5,pady=5,side=tk.TOP)

root.mainloop()

[Python] pyenv管理アプリ v0.0.1 標準出力取得

pyenvをGUIで管理するアプリを作っていきます。

まずはpyenvでインストールしているPythonのバージョンを取得し、Textウィジェットに反映させます。

試してみたらsubprocess.PIPEはPopen​()関数だけでなく、run()関数でも使えました。

import subprocess,datetime,os
import tkinter as tk
import tkinter.font as font
from tkinter import ttk

# 色
# #EDFFBE #C2EEFF #7B3CFF

proc = subprocess.run("pyenv versions", shell=True, stdout= subprocess.PIPE, stderr = subprocess.PIPE)
print(proc.stdout)
# こちらでも可能
# proc = subprocess.check_output("pyenv versions", shell=True)
# print(proc)

# ウィンドウ設定
root = tk.Tk()
root.title("PYENV MANAGER v0.0.1")
root.geometry("345x300")
root.configure(bg='#EDFFBE')
style = ttk.Style()
style.theme_use('classic')
style.configure("MyWidget.TButton", gripcount=0,
                background="#7B3CFF", foreground="#EEFFFF",darkcolor='#7B3CFF', lightcolor="LightGreen",
                troughcolor="gray", bordercolor="gray", arrowcolor="white")

# フォント設定
my_font = font.Font(root,family="System",size=18,weight="normal")
my_font2 = font.Font(root,family="System",size=16,weight="normal")

# Frame設定
frame = tk.Frame(root,background = '#EDFFBE')
frame.grid(row=0,column=0, sticky=tk.NSEW, padx=5, pady=10)

# Text設定
text = tk.Text(frame,height=20,width=30,background = '#C2EEFF',foreground = '#8b0000')
text.grid(row=0,column=0,sticky=tk.W)

# Button設定
btnA = ttk.Button(frame, text="Python確認",command=lambda:text.insert(tk.END,proc.stdout),width=8,style= 'MyWidget.TButton')
btnA.grid(row=0,column=1,padx=10,sticky=tk.N)

root.mainloop()