我正在使用Ruby-Tk为OS X开发桌面应用程序,我想为该应用程序提供Apple Events界面.这意味着应用程序将定义它将响应的AppleScript命令字典(对应于发送到应用程序的Apple Events),并且用户/其他应用程序可以使用AppleScript命令编写Ruby-Tk应用程序的脚本.其他脚本语言支持这样的功能 - 通过http://appscript.svn.sourceforge.net/viewvc/appscript/py-aemreceive/上的py-aemreceive库提供Python,并通过http://tclae.sourceforge上的tclAE库提供Tcl .net /.我一直在寻找Ruby中的类似功能,并且空洞.
一个可能的机制是rubyobjc桥,它提供了Ruby和Objective-C之间的低级接口,但是这个gem似乎很少使用,并且在示例和文档中非常缺乏,所以我不确定这是否是一个追求卓有成效的道路.
注意:MacRuby可能有效,但它与Tk不兼容,所以排除了MacRuby.此外,RubyOSA和rb-appscript不是我想要的 - 它们允许Ruby将Apple Events发送到其他应用程序,而不是接收它们.
我一直在玩TKinter试图创建一个多选项卡窗口.
当我尝试的风格TNotebook.Tab它忽略了选项background和borderwidth,但它承认foreground.我究竟做错了什么?
以下是代码的相关部分:
COLOR_1 = 'black'
COLOR_2 = 'white'
COLOR_3 = 'red'
COLOR_4 = '#2E2E2E'
COLOR_5 = '#8A4B08'
COLOR_6 = '#DF7401'
#Notebook Style
noteStyler = ttk.Style()
noteStyler.configure("TNotebook", background=COLOR_1, borderwidth=0)
noteStyler.configure("TNotebook.Tab", background=COLOR_1, foreground=COLOR_3, lightcolor=COLOR_6, borderwidth=0)
noteStyler.configure("TFrame", background=COLOR_1, foreground=COLOR_2, borderwidth=0)
#Create Notebook and Tabs
note = ttk.Notebook(gui, style='TNotebook')
myTab = ttk.Frame(note, style='TFrame')
note.add(myTab, text = 'MyTab', compound=tk.TOP)
note.pack(anchor=tk.W)
Run Code Online (Sandbox Code Playgroud)
这是窗口的图像:

如果它很重要,我在Windows 7 64位上运行python 2.7.
我知道您可以通过以下命令让框架小部件扩展并填充其容器中可用的所有区域:frameName.pack(fill = 'both', expand = True)
对于文本的字体大小有何作用?目前我的文本是标签小部件的属性。标签小部件的父级是frameName。
我想我可以定义自己的函数来调用以随着labelName.config(fontsize = N)框架变大而更新字体大小,但我不确定如何将它们关联起来。
这就是我的程序现在的样子:
每个块都是一个框架小部件。我希望文本能够扩展以填充框架的某些容量,并响应窗口大小的调整。
我不知道如何解释这个,实际上我正在寻找解释,所以我只想提一些步骤来重现这个问题.希望有人能够理解和阐述:
我是IDLE的粉丝.它是标准Python安装附带的轻量级IDE,我不想因此而切换到另一个IDE.但对于我来说,以上是最讨厌IDLE的事情.每当我需要编写一个包含波斯语字符的程序时,我不能相信IDLE正确输入它们,我必须打开其他程序并使用复制粘贴方法.
我正在寻找的是:
此信息也可能有所帮助:
>>> import locale
>>> locale.getdefaultlocale()
('en_US', 'cp1256')
>>> locale.getpreferredencoding()
'cp1256'
>>> locale.getlocale()
('English_United States', '1252')
>>>
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
Run Code Online (Sandbox Code Playgroud)
谢谢.
更新:
请参阅下面的前三条评论.似乎这个问题是由在tkinter应用程序中键入时使用WindowsBestFit映射引起的.
为了测试它是否在python/tkinter绑定或tcl/tk本身中的一些错误配置,我下载并安装了Tkabber.这是一个用Tcl/Tk编写的应用程序.那么,存在完全相同的问题,即我不能输入上面的字符,但可以复制和粘贴它们.所以我的结论是问题的根源在于tcl/tk本身而不是IDLE/Python/tkinter.
我的问题仍然存在.
该视频向我介绍了 X 的问题以及 Wayland 协议的替代方案。多年来,Wayland 协议的采用似乎在不断增长。
我的问题:
我有一个按钮可以在我的代码上打开一个新窗口,我一直在尝试使该按钮打开一个名为“newest_release_window”的新窗口,并考虑到两件事:
不幸的是,它变得太复杂了,我一生都无法弄清楚如何去做。问题是我无法让代码检测“newest_release_window”是否打开,并据此更改变量。
welcome_window = Tk()
welcome_window.title("Games R Us")
welcome_window.geometry("360x350")
welcome_window.configure(bg = "gold")
currentDisplay = 10
newest_release_windowtracker = 0
gui_font_5 = ("Helvetica", 5, "bold")
gui_font_10 = ("Helvetica", 10, "bold")
gui_font_15 = ("Helvetica", 15, "bold")
gui_font_20 = ("Helvetica", 20, "bold")
space_between = (5)
button_variable = IntVar()
def newwindow_newest_release():
global newest_release_windowtracker
newest_release_window = Tk()
newest_release_window.title("Games R Us")
newest_release_window.geometry("360x350")
newest_release_window.configure(bg = "greenyellow")
currentDisplay = 10
display = Label(newest_release_window, text="Humm, see a new window !",
bg ="limegreen")
display.pack()
newest_release_window.withdraw()
if newest_release_windowtracker == 0: …Run Code Online (Sandbox Code Playgroud) 使用 Python Tkinter ,创建一个子面板(TopLevel)来显示内容并获取用户输入,用户输入后,单击“退出”,发现整个 GUI(主面板)也被破坏。如何只关闭顶层窗口?
from tkinter import *
lay=[]
root = Tk()
root.geometry('300x400+100+50')
def exit_btn():
top = lay[0]
top.quit()
top.destroy()
def create():
top = Toplevel()
lay.append(top)
top.title("Main Panel")
top.geometry('500x500+100+450')
msg = Message(top, text="Show on Sub-panel",width=100)
msg.pack()
btn = Button(top,text='EXIT',command=exit_btn)
btn.pack()
Button(root, text="Click me,Create a sub-panel", command=create).pack()
mainloop()
Run Code Online (Sandbox Code Playgroud) 我看到并看到了很多关于 tkinter 的问题,这些问题通常不是询问代码中的错误,而是询问如何组织我的 GUI。所以我想有一个专注于这一点的答案,并帮助初学者稍微定位一下。
我有一个复选按钮:
from tkinter import *
master = Tk()
Checkbutton(master, text="Here...").grid(row=0, sticky=W)
mainloop()
Run Code Online (Sandbox Code Playgroud)
看起来像这样:
我尝试将复选按钮移到另一侧(以支持 RTL 语言),所以它会像:
Here...[]
我知道我可以在复选按钮旁边绘制一个标签,但这样单击文本不会影响复选按钮。
我该怎么做?
tk-toolkit ×10
tkinter ×8
python ×7
python-3.x ×2
appleevents ×1
applescript ×1
codepages ×1
layout ×1
python-2.7 ×1
python-idle ×1
ruby ×1
ttk ×1
unicode ×1
wayland ×1