我已经用Kivy构建了一个用户界面,该用户界面在程序启动时会正确显示,但是如果我插入新的监视器(或拖动到扩展监视器),则所有内容都会在窗口下消失,但是我可以看到部分内容当我最大化窗口时工作。如何将程序定位到窗口的开头?
我试图每秒将主布局的顶部值与窗口顶部的值进行匹配,并且试图每秒钟重置主布局的位置。
我的奇异果文件
auto byCount = [counts](const int& a, const int& b) { return counts.at(a) > counts.at(b); };
我试图修复它
#:import inch kivy.metrics.inch
<Questionaire>:
#column_gl: ColumnGL
outer_column_gl: OuterColumnGL
cols: 2
GridLayout:
id: OuterColumnGL
cols: 1
size_hint_x: None
width: inch(2)
GridLayout:
id: ColumnGL
cols: 2
size_hint_y: .9
Button:
size_hint_x: None
width: inch(.1)
Button:
text: 'stuff'
Button:
size_hint_y: .1
text: 'more stuff'
答案 0 :(得分:0)
使用size_hint_x或size_hint_x允许您设置窗口小部件相对于其父窗口小部件的大小。使用''pos_hint:{'x':val,'y':val}''会将窗口小部件的位置设置为其父窗口小部件。由于size_hint和pos_hint都相对于其父窗口小部件,因此x和y的值在0-1的范围内。
我建议您为按钮使用size_hint_x:0-1而不是宽度,这样它们将自动适应变化的分辨率。我将提供一个样本来帮助您。
无论使用生成器还是.kv文件,尺寸和位置最好以kv语言完成。添加的类和函数不需要具有反应性小部件。让我知道您是否需要更多说明或对奇异果有任何其他疑问。
同样,如果您希望它们自动缩放,我会在您的窗口小部件之后推荐这样做:
size_hint_x: 0.00-1.00
size_hint_y: 0.00-1.00
pos_hint: {'x': 0.00-1.00, 'y': 0.00-1.00}
一个应该向您展示其工作方式的示例,尽管我怀疑您需要所有额外的导入,因为这是为了在更改分辨率时保持一致性:
from kivy.app import App
from kivy.lang import Builder
from kivy.config import Config
from kivy.core.window import Window
from kivy.uix.gridlayout import GridLayout
from kivy.uix.screenmanager import ScreenManager, Screen
Config.set('input', 'mouse', 'mouse,multitouch_on_demand') #Prevent red dots from populating the screen with right clicks
Config.set('graphics','resizable',0) #Self-explanatory, prevents you from resizing the window
Config.write() #Writes the Config settings for the application
Builder.load_string("""
<One>:
GridLayout:
cols: 2
size_hint_x: .5
pos_hint: {'x': 0, 'y': 0}
GridLayout:
id: OuterColumnGL
cols: 1
size_hint_x: .2
GridLayout:
id: ColumnGL
cols: 2
size_hint_y: .9
Button:
size_hint_x: .3
Button:
text: 'stuff'
Button:
size_hint_y: .1
text: 'more stuff'
Button:
text: 'Change Res'
size_hint_x:.2
size_hint_y: .2
pos_hint: {'x': .75, 'y': .05}
on_release: root.enlarge()
<Two>:
GridLayout:
cols: 2
size_hint_x: .5
pos_hint: {'x': 0, 'y': 0}
GridLayout:
id: OuterColumnGL
cols: 1
size_hint_x: .2
GridLayout:
id: ColumnGL
cols: 2
size_hint_y: .9
Button:
size_hint_x: .3
Button:
text: 'stuff'
Button:
size_hint_y: .1
text: 'more stuff'
Button:
text: 'Change Res'
size_hint_x:.2
size_hint_y: .2
pos_hint: {'x': .75, 'y': .05}
on_release: root.shrink()
""")
class One(Screen):
def enlarge(self):
Window.size = (500, 600)
sm.current = 'two'
class Two(Screen):
def shrink(self):
Window.size = (300, 400)
sm.current = 'one'
sm = ScreenManager()
sm.add_widget(One(name='one'))
sm.add_widget(Two(name='two'))
class SampleApp(App):
def build(self):
Window.size = (300, 400)
Window.left = 750
Window.top = 40
return sm
if __name__ == '__main__':
SampleApp().run()