ハッキーバージョンは、私が探していたものには必ずしも理想的ではありませんでした。文字列のピクセルサイズに基づいて静的な幅のサイズを設定すると、うまく機能することがわかりました。環境にうまく適応し、動的に変更することができます。これはPython3とwxPythonPhoenixで行われたため、このメソッドは以前は利用できなかった可能性があります。
これが簡単なバージョンです。
import wx
class MainWindow(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
version = "v. 1.0.32 (2012-11-03)"
# Returns a Size object of the pixel dimensions of a string
version_size = wx.Window.GetTextExtent(self, version)
# Create a status bar with two sections
self.CreateStatusBar(2)
# Set the left side to a negative number indicating it's fluid width
# The right side will be the exact size of the version string
self.SetStatusWidths([-1, version_size.width])
# Set the left side of the status bar to some text. 0 is first section
self.SetStatusText("left status bar text", 0)
# Set right side to version number. 1 is second section
self.SetStatusText(version, 1)
self.Show()
app = wx.App()
frame = MainWindow(None)
app.MainLoop()
ここで動的に更新する方法を示すために、スレッド化されたランダム更新を使用したもう少し複雑なバージョンを示します。
import wx
import time
import random
import threading
class MainWindow(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
version = "v. 1.0.32 (2012-11-03)"
# Returns a Size object of the pixel dimensions of a string
version_size = wx.Window.GetTextExtent(self, version)
# Create a status bar with two section
self.CreateStatusBar(2)
# Set the left side to a negative number indicating it's fluid width
# The right side will be the exact size of the version string
self.SetStatusWidths([-1, version_size.width])
# Set the left side of the status bar to some text. 0 is first section
self.SetStatusText("left status bar text", 0)
# Set right side to version number. 1 is second section
self.SetStatusText(version, 1)
self.Show()
# Thread to update status bar with causing the GUI to hang
run_version_updates = threading.Thread(target=self.thread_version_updating)
run_version_updates.start()
def thread_version_updating(self):
for i in range(10):
time.sleep(1)
# Create a random string of 1-20 characters containing only "ABC123"
random_string = "".join(random.choice("ABC123") for _ in range(random.randrange(1,20)))
self.update_version(random_string)
def update_version(self, version):
# Get width of string, set status bar width, then update the text
size = wx.Window.GetTextExtent(self, version)
self.SetStatusWidths([-1, size.width])
self.SetStatusText(version, 1)
app = wx.App()
frame = MainWindow(None)
app.MainLoop()
私はオペレーティングシステムを1つしか持っていませんが、さまざまなWindows7テーマでどのように表示されたかを次に示します。
7エアロに勝つ
Win7クラシック