在 Tkinter 框架内嵌入 konsole 或 gnome 终端
Posted
技术标签:
【中文标题】在 Tkinter 框架内嵌入 konsole 或 gnome 终端【英文标题】:Embed a konsole or gnome-terminal inside a Tkinter Frame 【发布时间】:2018-11-07 22:59:02 【问题描述】:我能够将 xterm 嵌入到 Tkinter GUI 框架中:
Frame2 = Frame(master)
Frame2.pack(fill=BOTH, expand=YES)
wid = Frame2.winfo_id()
os.system('xterm -into %d -hold -geometry 300x10 -sb &' % wid)
但这不起作用:
Frame2 = Frame(master)
Frame2.pack(fill=BOTH, expand=YES)
wid = Frame2.winfo_id()
os.system('gnome-terminal' % wid)
TypeError: not all arguments converted during string formatting
我可以以任何方式在框架中嵌入 konsole 或 gnome 终端吗?
【问题讨论】:
在'gnome-terminal' % wid
中,没有将wid
值放入字符串的位置。你可能应该在某个地方有一个%d
。
如果我执行 os.system('gnome-terminal -into %d -hold -geometry 300x10 -sb &' % wid) 它是未知选项 -into(也是 --into)。跨度>
这不是解决方案。我在 xterm 句子上找不到与 -into 等效的词。但是,我所做的是更改背景,现在看起来更像 konsole,这是我想插入框架的那个。 os.system('xterm -fg white -bg black -into %d -hold -geometry 300x10 -sb &' % wid)
我并不是说我有办法解决你的问题(因为老实说我什至不明白你想要什么),我只是告诉你你得到的 TypeError 来自哪里。
是的,我尝试了几件事。您没有 %d 是正确的,它不会与框架 ID 连接,但是当您没有嵌入 xterm 而是 konsole 或 gnome-terminal 时,问题是 -into (既不 --into)被识别。我可以同时打开两者,但只能在框架内使用 xterm。我找到了打开 gnome-terminal 或 konsole 的方法,但不在 tkinter 框架内。无论如何谢谢你的回答。它澄清了为什么我不能。任何指向 os.system 上 gnome-terminal 或 konsole 属性的链接?我没有找到任何与此相关的内容。
【参考方案1】:
urxvt 和 st(Suckless Simple Terminal)也可以选择将终端窗口嵌入到另一个窗口中。
我在 Gtk 中执行此操作,但请记住,使用 Wayland,他们都在移除对插座和插头的支持,这就是将窗口嵌入其他窗口的机制。
【讨论】:
【参考方案2】:我在Ubuntu上没有太多经验,但是在打字之后
xterm -帮助 控制台-帮助 gnome-terminal --help我意识到也许 xterm 是嵌入 tkinter 框架的最佳终端,因为我不知道我可以编辑
/etc/X11/Xresources/x11-common(我运行的是 kubuntu 18.04)
和change as much as I want the style of the terminal:
XTerm*faceName: Bitstream Vera Serif Mono
xterm*faceSize: 11
xterm*vt100*geometry: 80x60
xterm*saveLines: 16384
xterm*loginShell: true
xterm*charClass: 33:48,35:48,37:48,43:48,45-47:48,64:48,95:48,126:48
xterm*termName: xterm-color
xterm*eightBitInput: false
!BLK Cursor
#define _color0 #000d18
#define _color8 #000d18
!RED Tag
#define _color1 #e89393
#define _color9 #e89393
!GRN SpecialKey
#define _color2 #9ece13
#define _color10 #9ece13
!YEL Keyword
#define _color3 #f0dfaf
#define _color11 #f0dfaf
!BLU Number
#define _color4 #8cd0d3
#define _color12 #8cd0d3
!MAG Precondit
#define _color5 #c0bed1
#define _color13 #c0bed1
!CYN Float
#define _color6 #dfaf8f
#define _color14 #dfaf8f
!WHT Search
#define _color7 #efefef
#define _color15 #efefef
!FMT Include, StatusLine, ErrorMsg
#define _colorBD #ffcfaf
#define _colorUL #ccdc90
#define _colorIT #80d4aa
!TXT Normal, Normal, Cursor
#define _foreground #dcdccc
#define _background #1f1f1f
#define _cursorColor #8faf9f
URxvt*color0 : _color0
URxvt*color1 : _color1
URxvt*color2 : _color2
URxvt*color3 : _color3
URxvt*color4 : _color4
URxvt*color5 : _color5
URxvt*color6 : _color6
URxvt*color7 : _color7
URxvt*color8 : _color8
URxvt*color9 : _color9
URxvt*color10 : _color10
URxvt*color11 : _color11
URxvt*color12 : _color12
URxvt*color13 : _color13
URxvt*color14 : _color14
URxvt*color15 : _color15
URxvt*colorBD : _colorBD
URxvt*colorIT : _colorIT
URxvt*colorUL : _colorUL
URxvt*foreground : _foreground
URxvt*background : _background
URxvt*cursorColor : _cursorColor
XTerm*color0 : _color0
XTerm*color1 : _color1
XTerm*color2 : _color2
XTerm*color3 : _color3
XTerm*color4 : _color4
XTerm*color5 : _color5
XTerm*color6 : _color6
XTerm*color7 : _color7
XTerm*color8 : _color8
XTerm*color9 : _color9
XTerm*color10 : _color10
XTerm*color11 : _color11
XTerm*color12 : _color12
XTerm*color13 : _color13
XTerm*color14 : _color14
XTerm*color15 : _color15
XTerm*colorBD : _colorBD
XTerm*colorIT : _colorIT
XTerm*colorUL : _colorUL
XTerm*foreground : _foreground
XTerm*background : _background
XTerm*cursorColor : _cursorColor
【讨论】:
我看到的问题是每次重新启动系统时都需要执行 xrdb -merge /etc/X11/Xresources/x11-common。我认为每次我的程序启动时都需要使用该命令执行一个过程 您需要在每个会话中以一种或另一种方式配置 X 资源一次。一旦加载它们,它们将一直存在,直到用户注销(或 X 崩溃等)。但这里的主要问题是您将覆盖用户的实际偏好。 @tripleee 该用户不再使用 Stack Overflow,因此无法回复您的评论。您可能需要考虑自己编辑他们的答案,或提供新答案。以上是关于在 Tkinter 框架内嵌入 konsole 或 gnome 终端的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 tkinter 在 python 中嵌入 python 解释器框架?
深入浅出matplotlib(79):在tkinter应用程序里嵌入matplotlib绘图